Remove accidently added 3rd party apps
|
@ -1,51 +0,0 @@
|
|||
# the default generated dir + db file
|
||||
data
|
||||
owncloud
|
||||
config/config.php
|
||||
config/mount.php
|
||||
apps/inc.php
|
||||
|
||||
# just sane ignores
|
||||
.*.sw[po]
|
||||
*.bak
|
||||
*.BAK
|
||||
*~
|
||||
*.orig
|
||||
*.class
|
||||
.cvsignore
|
||||
Thumbs.db
|
||||
*.py[co]
|
||||
_darcs/*
|
||||
CVS/*
|
||||
.svn/*
|
||||
RCS/*
|
||||
|
||||
# kdevelop
|
||||
.kdev
|
||||
*.kdev4
|
||||
|
||||
# Lokalize
|
||||
*lokalize*
|
||||
|
||||
# eclipse
|
||||
.project
|
||||
.settings
|
||||
|
||||
# netbeans
|
||||
nbproject
|
||||
|
||||
# geany
|
||||
*.geany
|
||||
|
||||
# Cloud9IDE
|
||||
.settings.xml
|
||||
|
||||
# vim ex mode
|
||||
.vimrc
|
||||
|
||||
# Mac OS
|
||||
.DS_Store
|
||||
|
||||
# WebFinger
|
||||
.well-known
|
||||
/.buildpath
|
|
@ -1,661 +0,0 @@
|
|||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public 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.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 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 Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
|
@ -1,10 +0,0 @@
|
|||
Files in TAL Templating System for ownCloud are licensed under the Affero General Public License version 3,
|
||||
the text of which can be found in COPYING-AGPL, or any later version of the AGPL,
|
||||
unless otherwise noted.
|
||||
|
||||
Licensing of components:
|
||||
* PHPTAL - http://phptal.org/ : LGPL
|
||||
|
||||
All unmodified files from these and other sources retain their original copyright
|
||||
and license notices: see the relevant individual files.
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
# Changelog
|
||||
|
||||
### 0.1
|
||||
|
||||
- First release.
|
|
@ -1,38 +0,0 @@
|
|||
# Journal/Notes app for ownCloud
|
||||
|
||||
## Features
|
||||
|
||||
- Saves notes/journal entries as VJOURNAL records in the ownCloud Calendar.
|
||||
|
||||
- Integrates with ownClouds search backend.
|
||||
|
||||
- Sort entries by date/time ascending/descending or summary ascending/descending.
|
||||
|
||||
- Plain text or rich text editing (rich text editing is still buggy and immature).
|
||||
|
||||
- Syncs with KDEPIMs Journal part.
|
||||
|
||||
- Completed tasks from the Task app can be automatically added as journal entries.
|
||||
|
||||
- Stores entry data as json objects in each element for quich access and to minimize ajax calls.
|
||||
|
||||
To install this app you will first have to install the [TAL Page Templates for ownCloud](/tanghus/tal#readme) app.
|
||||
|
||||
## Installation from git
|
||||
|
||||
1. Go to your ownCloud apps dir and clone the repo there:
|
||||
<pre>
|
||||
cd owncloud/apps
|
||||
git clone git://github.com/tanghus/journal.git</pre>
|
||||
|
||||
2. From your browser go to the ownCloud apps page (`/settings/apps.php`) and enable the Journal app.
|
||||
|
||||
3. After a page refresh you should see the Journal app in the main menu.
|
||||
|
||||
|
||||
## DISCLAIMER
|
||||
|
||||
There's no garantee this app won't eat your data, chew it up and spit it out. It works directly on the calendar app data
|
||||
though not touching anything but VJOURNAL entries. [Always backup!](http://tanghus.net/2012/04/backup-owncloud-calendar-and-contacts/)
|
||||
|
||||
Please report any issues at the [github issue tracker](https://github.com/tanghus/journal/issues)
|
|
@ -1,13 +0,0 @@
|
|||
|
||||
- Fix categories.
|
||||
|
||||
- Hide empty elements?
|
||||
|
||||
- Check if entered text in one mode gets transfered when changing modes.
|
||||
|
||||
- Make edit area fit size and scrollable.
|
||||
|
||||
- Add an "only read from this calendar" checkbox.
|
||||
|
||||
- Test, test, test in other browser as well.
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('contacts');
|
||||
|
||||
$id = isset($_GET['id'])?$_GET['id']:null;
|
||||
if(is_null($id)) {
|
||||
OCP\JSON::error(array('data' => array('message' => OC_Contacts_App::$l10n->t('No ID provided'))));
|
||||
exit();
|
||||
}
|
||||
$vcard = OC_Contacts_App::getContactVCard( $id );
|
||||
foreach($vcard->children as $property){
|
||||
//OCP\Util::writeLog('contacts','ajax/categories/checksumfor.php: '.$property->name, OCP\Util::DEBUG);
|
||||
if($property->name == 'CATEGORIES') {
|
||||
$checksum = md5($property->serialize());
|
||||
OCP\JSON::success(array('data' => array('value'=>$property->value, 'checksum'=>$checksum)));
|
||||
exit();
|
||||
}
|
||||
}
|
||||
OCP\JSON::error(array('data' => array('message' => OC_Contacts_App::$l10n->t('Error setting checksum.'))));
|
||||
?>
|
|
@ -1,54 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('contacts');
|
||||
OCP\JSON::callCheck();
|
||||
|
||||
foreach ($_POST as $key=>$element) {
|
||||
debug('_POST: '.$key.'=>'.print_r($element, true));
|
||||
}
|
||||
|
||||
require_once('../util.php');
|
||||
|
||||
$categories = isset($_POST['categories'])?$_POST['categories']:null;
|
||||
|
||||
if(is_null($categories)) {
|
||||
bailOut(OC_Contacts_App::$l10n->t('No categories selected for deletion.'));
|
||||
}
|
||||
|
||||
debug(print_r($categories, true));
|
||||
|
||||
$addressbooks = OC_Contacts_Addressbook::all(OCP\USER::getUser());
|
||||
if(count($addressbooks) == 0) {
|
||||
bailOut(OC_Contacts_App::$l10n->t('No address books found.'));
|
||||
}
|
||||
$addressbookids = array();
|
||||
foreach($addressbooks as $addressbook) {
|
||||
$addressbookids[] = $addressbook['id'];
|
||||
}
|
||||
$contacts = OC_Contacts_VCard::all($addressbookids);
|
||||
if(count($contacts) == 0) {
|
||||
bailOut(OC_Contacts_App::$l10n->t('No contacts found.'));
|
||||
}
|
||||
|
||||
$cards = array();
|
||||
foreach($contacts as $contact) {
|
||||
$cards[] = array($contact['id'], $contact['carddata']);
|
||||
}
|
||||
|
||||
debug('Before delete: '.print_r($categories, true));
|
||||
|
||||
$catman = new OC_VCategories('contacts');
|
||||
$catman->delete($categories, $cards);
|
||||
debug('After delete: '.print_r($catman->categories(), true));
|
||||
OC_Contacts_VCard::updateDataByID($cards);
|
||||
OCP\JSON::success(array('data' => array('categories'=>$catman->categories())));
|
||||
|
||||
?>
|
|
@ -1,17 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('journal');
|
||||
|
||||
$categories = OC_Journal_App::getCategories();
|
||||
|
||||
OCP\JSON::success(array('data' => array('categories'=>$categories)));
|
||||
|
||||
?>
|
|
@ -1,42 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('journal');
|
||||
|
||||
foreach ($_POST as $key=>$element) {
|
||||
debug('_POST: '.$key.'=>'.print_r($element, true));
|
||||
}
|
||||
|
||||
function bailOut($msg) {
|
||||
OCP\JSON::error(array('data' => array('message' => $msg)));
|
||||
OCP\Util::writeLog('journal','ajax/categories/rescan.php: '.$msg, OCP\Util::DEBUG);
|
||||
exit();
|
||||
}
|
||||
function debug($msg) {
|
||||
OCP\Util::writeLog('journal','ajax/categories/rescan.php: '.$msg, OCP\Util::DEBUG);
|
||||
}
|
||||
|
||||
$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser());
|
||||
if(count($calendars) == 0) {
|
||||
bailOut(OC_Calendar_App::$l10n->t('No calendars found.'));
|
||||
}
|
||||
$events = array();
|
||||
foreach($calendars as $calendar) {
|
||||
$calendar_events = OC_Calendar_Object::all($calendar['id']);
|
||||
$events = $events + $calendar_events;
|
||||
}
|
||||
if(count($events) == 0) {
|
||||
bailOut(OC_Calendar_App::$l10n->t('No events found.'));
|
||||
}
|
||||
|
||||
OC_Calendar_App::scanCategories($events);
|
||||
$categories = OC_Calendar_App::getCategoryOptions();
|
||||
|
||||
OCP\JSON::success(array('data' => array('categories'=>$categories)));
|
|
@ -1,37 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - Journal
|
||||
*
|
||||
* @copyright 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('journal');
|
||||
OCP\JSON::callCheck();
|
||||
|
||||
$id = isset($_POST['id'])?$_POST['id']:null;
|
||||
if(is_null($id)) {
|
||||
OCP\JSON::error(array('data'=>array('message' => OC_Journal_App::$l10n->t('ID is not set!'))));
|
||||
exit;
|
||||
}
|
||||
$journal = OC_Calendar_App::getEventObject($id);
|
||||
if($journal) {
|
||||
OC_Calendar_Object::delete($id);
|
||||
OCP\JSON::success(array('data' => array( 'id' => $id )));
|
||||
} else {
|
||||
OCP\JSON::error(array('data' => array('id' => $id, 'message' => OC_Journal_App::$l10n->t('Could not find journal entry: '.$id))));
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
// Init owncloud
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('journal');
|
||||
|
||||
$calendars = OC_Calendar_Calendar::allCalendars(OCP\User::getUser(), true);
|
||||
$user_timezone = OCP\Config::getUserValue(OCP\User::getUser(), 'calendar', 'timezone', date_default_timezone_get());
|
||||
session_write_close();
|
||||
$journals = array();
|
||||
foreach( $calendars as $calendar ){
|
||||
$calendar_journals = OC_Calendar_Object::all($calendar['id']);
|
||||
foreach( $calendar_journals as $journal ) {
|
||||
if($journal['objecttype']!='VJOURNAL') {
|
||||
continue;
|
||||
}
|
||||
if(is_null($journal['summary'])) {
|
||||
continue;
|
||||
}
|
||||
$object = OC_VObject::parse($journal['calendardata']);
|
||||
$vjournalobj = $object->VJOURNAL;
|
||||
try {
|
||||
$journals[] = OC_Journal_App::arrayForJSON($journal['id'], $vjournalobj, $user_timezone);
|
||||
} catch(Exception $e) {
|
||||
OCP\Util::writeLog('journal', 'ajax/getentries.php. id: '.$journal['id'].' '.$e->getMessage(), OCP\Util::ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
OCP\JSON::success(array('data' => array('entries' => $journals)));
|
|
@ -1,138 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
$htmlwrap = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head></head><body>%s</body></html>';
|
||||
$divwrap = '<div>%s</div>';
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('journal');
|
||||
OCP\JSON::callCheck();
|
||||
|
||||
$id = isset($_POST['id'])?$_POST['id']:null;
|
||||
$property = isset($_POST['type'])?$_POST['type']:null;
|
||||
$value = isset($_POST['value'])?$_POST['value']:null;
|
||||
if(is_null($id)) {
|
||||
OCP\JSON::error(array('data'=>array('message' => OC_Journal_App::$l10n->t('ID is not set!'))));
|
||||
exit;
|
||||
}
|
||||
if(is_null($property)) {
|
||||
OCP\JSON::error(array('data'=>array('message' => OC_Journal_App::$l10n->t('Property name is not set!'))));
|
||||
exit;
|
||||
}
|
||||
if(is_null($value)) {
|
||||
OCP\JSON::error(array('data'=>array('message' => OC_Journal_App::$l10n->t('Property value is not set!'))));
|
||||
exit;
|
||||
}
|
||||
|
||||
foreach($_POST as $key => $val) {
|
||||
error_log($key.': '.print_r($val, true));
|
||||
}
|
||||
|
||||
$parameters = isset($_POST['parameters'])? $_POST['parameters']:null;
|
||||
if($id == 'new') {
|
||||
$vcalendar = OC_Journal_App::createVCalendar();
|
||||
} else {
|
||||
$vcalendar = OC_Calendar_App::getVCalendar( $id );
|
||||
}
|
||||
error_log('saveproperty: '.$property.': '.print_r($value, true));
|
||||
$vjournal = $vcalendar->VJOURNAL;
|
||||
switch($property) {
|
||||
case 'DESCRIPTION':
|
||||
$hasgenericformat = false;
|
||||
$haskdeformat = false;
|
||||
if(!$vjournal->DESCRIPTION) {
|
||||
$vjournal->setString('DESCRIPTION', $value);
|
||||
}
|
||||
if($parameters && isset($parameters['FORMAT']) && strtoupper($parameters['FORMAT']) == 'HTML') {
|
||||
if($value[0] != '<') { // Fugly hack coming up
|
||||
$value = sprintf($divwrap, $value);
|
||||
}
|
||||
$vjournal->DESCRIPTION->value = sprintf($htmlwrap, $value);
|
||||
foreach($vjournal->DESCRIPTION->parameters as $parameter){
|
||||
if(stripos($parameter->name, 'X-KDE-TEXTFORMAT') !== false && stripos($parameter->value, 'HTML') !== false){
|
||||
$haskdeformat = true;
|
||||
}
|
||||
if(stripos($parameter->name, 'X-TEXTFORMAT') !== false && stripos($parameter->value, 'HTML') !== false){
|
||||
$hasgenericformat = true;
|
||||
}
|
||||
}
|
||||
if(!$haskdeformat) {
|
||||
try {
|
||||
$vjournal->DESCRIPTION->add(new Sabre_VObject_Parameter('X-KDE-TEXTFORMAT', 'HTML'));
|
||||
} catch (Exception $e) {
|
||||
OCP\JSON::error(array('data'=>array('message'=>OC_Journal_App::$l10n->t('Error setting rich text format parameter: '.$e->getMessage()))));
|
||||
exit();
|
||||
}
|
||||
}
|
||||
if(!$hasgenericformat) { // Add a more generic text formatting parameter in case other clients would use VJOURNAL this way.
|
||||
try {
|
||||
$vjournal->DESCRIPTION->add(new Sabre_VObject_Parameter('X-TEXTFORMAT', 'HTML'));
|
||||
} catch (Exception $e) {
|
||||
OCP\JSON::error(array('data'=>array('message'=>OC_Journal_App::$l10n->t('Error setting rich text format parameter: '.$e->getMessage()))));
|
||||
exit();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$vjournal->DESCRIPTION->value = $value;
|
||||
}
|
||||
break;
|
||||
case 'DTSTART':
|
||||
try {
|
||||
$date_only = isset($_POST['date_only']) && (bool)$_POST['date_only'] == true?true:false;
|
||||
$timezone = OCP\Config::getUserValue(OCP\User::getUser(), 'calendar', 'timezone', date_default_timezone_get());
|
||||
$timezone = new DateTimeZone($timezone);
|
||||
//$dtstart = new DateTime($value, $timezone);
|
||||
$dtstart = new DateTime('@'.$value);
|
||||
$dtstart->setTimezone($timezone);
|
||||
$type = Sabre_VObject_Property_DateTime::LOCALTZ;
|
||||
if ($date_only) {
|
||||
$type = Sabre_VObject_Property_DateTime::DATE;
|
||||
}
|
||||
$vjournal->setDateTime('DTSTART', $value, $type);
|
||||
} catch (Exception $e) {
|
||||
OCP\JSON::error(array('data'=>array('message'=>OC_Journal_App::$l10n->t('Invalid date/time: '.$e->getMessage()))));
|
||||
exit();
|
||||
}
|
||||
break;
|
||||
case 'ORGANIZER':
|
||||
case 'SUMMARY':
|
||||
case 'CATEGORIES':
|
||||
$vobject = $vjournal->getVObject();
|
||||
if(isset($vobject[$property])) {
|
||||
$vobject[$property]['value'] = $value;
|
||||
} else {
|
||||
$vjournal->setString($property, $value);
|
||||
}
|
||||
break;
|
||||
$vjournal->setString($property, $value);
|
||||
break;
|
||||
default:
|
||||
OCP\JSON::error(array('data'=>array('message'=>'Unknown type: '.$property)));
|
||||
exit();
|
||||
}
|
||||
|
||||
$vjournal->setDateTime('LAST-MODIFIED', 'now', Sabre_VObject_Property_DateTime::UTC);
|
||||
$vjournal->setDateTime('DTSTAMP', 'now', Sabre_VObject_Property_DateTime::UTC);
|
||||
|
||||
if($id == 'new') {
|
||||
// TODO: Have a calendar ID parameter in request.
|
||||
$cid = OCP\Config::getUserValue(OCP\User::getUser(), 'journal', 'default_calendar', null);
|
||||
// Check that the calendar exists and that it's ours.
|
||||
$cid = OC_Calendar_App::getCalendar($cid, true);
|
||||
if(!$cid) {
|
||||
OCP\Util::writeLog('journal', 'The default calendar '.$cid.' is either not owned by '.OCP\User::getUser().' or doesn\'t exist.', OCP\Util::WARN);
|
||||
$calendars = OC_Calendar_Calendar::allCalendars(OCP\User::getUser(), true);
|
||||
$first_calendar = reset($calendars);
|
||||
$cid = $first_calendar['id'];
|
||||
}
|
||||
$id = OC_Calendar_Object::add($cid, $vcalendar->serialize());
|
||||
} else {
|
||||
OC_Calendar_Object::edit($id, $vcalendar->serialize());
|
||||
}
|
||||
$user_timezone = OCP\Config::getUserValue(OCP\User::getUser(), 'calendar', 'timezone', date_default_timezone_get());
|
||||
$journal_info = OC_Journal_App::arrayForJSON($id, $vjournal, $user_timezone);
|
||||
OCP\JSON::success(array('data' => $journal_info));
|
|
@ -1,36 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - Addressbook
|
||||
*
|
||||
* @copyright 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('journal');
|
||||
OCP\JSON::callCheck();
|
||||
|
||||
$id = isset($_POST['id'])?$_POST['id']:null;
|
||||
if(is_null($id)) {
|
||||
OCP\JSON::error(array('data'=>array('message' => OC_Journal_App::$l10n->t('ID is not set!'))));
|
||||
exit;
|
||||
}
|
||||
if(OCP\Config::setUserValue(OCP\USER::getUser(), 'journal', 'default_calendar', $id)) {
|
||||
OC_Calendar_Object::delete($id);
|
||||
OCP\JSON::success(array('data' => array( 'id' => $id )));
|
||||
} else {
|
||||
OCP\JSON::error(array('data' => array('id' => $id, 'message' => OC_Journal_App::$l10n->t('Could not set default calendar: '.$id))));
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - Addressbook
|
||||
*
|
||||
* @author Thomas Tanghus
|
||||
* @copyright 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
function bailOut($msg, $tracelevel=1, $debuglevel=OCP\Util::ERROR) {
|
||||
OCP\JSON::error(array('data' => array('message' => $msg)));
|
||||
debug($msg, $tracelevel, $debuglevel);
|
||||
exit();
|
||||
}
|
||||
|
||||
function debug($msg, $tracelevel=0, $debuglevel=OCP\Util::DEBUG) {
|
||||
if(PHP_VERSION >= "5.4") {
|
||||
$call = debug_backtrace(false, $tracelevel+1);
|
||||
} else {
|
||||
$call = debug_backtrace(false);
|
||||
}
|
||||
error_log('trace: '.print_r($call, true));
|
||||
$call = $call[$tracelevel];
|
||||
if($debuglevel !== false) {
|
||||
OCP\Util::writeLog('journal', $call['file'].'. Line: '.$call['line'].': '.$msg, $debuglevel);
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
<?php
|
||||
$l=new OC_L10N('journal');
|
||||
OC::$CLASSPATH['OC_Calendar_Calendar'] = 'calendar/lib/calendar.php';
|
||||
OC::$CLASSPATH['OC_Journal_App'] = 'journal/lib/app.php';
|
||||
OC::$CLASSPATH['OC_Search_Provider_Journal'] = 'journal/lib/search.php';
|
||||
OC::$CLASSPATH['OC_Journal_Hooks'] = 'journal/lib/hooks.php';
|
||||
|
||||
OCP\Util::connectHook('OC_Task', 'taskCompleted', 'OC_Journal_Hooks', 'taskToJournalEntry');
|
||||
|
||||
OCP\App::addNavigationEntry( array(
|
||||
'id' => 'journal_index',
|
||||
'order' => 11,
|
||||
'href' => OCP\Util::linkTo( 'journal', 'index.php' ),
|
||||
'icon' => OCP\Util::imagePath( 'journal', 'journal.png' ),
|
||||
'name' => $l->t('Journal')));
|
||||
|
||||
OC_Search::registerProvider('OC_Search_Provider_Journal');
|
||||
OCP\App::registerPersonal('journal','settings');
|
|
@ -1,11 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<info>
|
||||
<id>journal</id>
|
||||
<name>Journal</name>
|
||||
<version>0.1</version>
|
||||
<licence>AGPL</licence>
|
||||
<author>Thomas Tanghus</author>
|
||||
<require>5</require>
|
||||
<shipped>true</shipped>
|
||||
<description>Journal view from calendar</description>
|
||||
</info>
|
|
@ -1,19 +0,0 @@
|
|||
#leftcontent a { font-weight: bold; }
|
||||
#metadata { position: fixed; background-color: #ccc; width: 20em; right: 0; top: 6.5em; bottom: 0; overflow: auto; padding: 1em; margin: 0; font-size: 1em; font-weight: bold; }
|
||||
#metadata :disabled.property { background-color: #ccc; -webkit-appearance:none !important; -moz-appearance:none !important; -webkit-box-sizing:none !important; -moz-box-sizing:none !important; box-sizing:none !important; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; }
|
||||
#entry { position: fixed; background: #fff; top: 6.5em; bottom: 0; left: 32.5em !important; right: 22em; padding: 1em; margin: 0; }
|
||||
div.propertycontainer[data-type="DESCRIPTION"] { height: 90%; }
|
||||
#description { width: 95%; height: 90%; }
|
||||
.rte-content { position: absolute; left: 1em; right: 1em; top: 7em; bottom: 1em; overflow: auto; }
|
||||
#summary { width: 95%; font-size: 1.4em; font-weight: bold; height: 1.6em; }
|
||||
.editable,.content { font-size: 1.2em; background-color: #fff !important; border: 1px solid #fff !important; -webkit-appearance:none !important; -moz-appearance:none !important; -webkit-box-sizing:none !important; -moz-box-sizing:none !important; box-sizing:none !important; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; cursor: text; }
|
||||
.editable:hover,.editable:focus,.editable:hover:active { border: 1px solid #1d2d44 !important; }
|
||||
#categories,#organizer,#location,#link { width: 18em; clear: right; }
|
||||
#dtstartdate { width: 10em; }
|
||||
#dtstarttime { width: 5em; }
|
||||
.loading { background: url('%webroot%/core/img/loading.gif') no-repeat center !important; cursor: wait; }
|
||||
.action { padding-left: 0.5em; }
|
||||
label,dt { color: #aaa; }
|
||||
label:hover, dt:hover { color: #333; }
|
||||
.required { color: red; border: 3px solid red; }
|
||||
input { font-size: 1em; font-weight: bold; }
|
|
@ -1,7 +0,0 @@
|
|||
.rte-toolbar { margin: 0; width:100%; height:22px; padding:0; list-style-type:none; }
|
||||
.rte-toolbar li button, .rte-toolbar li a { float:left; cursor:pointer; opacity: 0.6; padding:0; margin: 0; border: 0; border-radius: 0; outline: 0; background: inherit; }
|
||||
.rte-toolbar li button:hover { opacity: 0.8; }
|
||||
.rte-content { cursor:text;position:absolute; border-color:#000;border-style:solid;white-space: pre-wrap;word-wrap:break-word; padding: 0.2em; }
|
||||
.rte-content ul { list-style: circle inside; }
|
||||
.rte-content li { padding-left: 1em; }
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<!-- Created using Karbon, part of Calligra: http://www.calligra.org/karbon -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16">
|
||||
<defs/>
|
||||
<g id="layer4">
|
||||
<g id="g2464" transform="translate(-3.90271, -4.31297)" fill="none">
|
||||
<path id="path2277" transform="translate(4.74736, 5.23002)" fill="#000000" fill-rule="evenodd" stroke="#000000" stroke-width="1.00000000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4.00000000000" d="M5.13684 0L0 13.8281L3.42454 13.8281L4.1862 11.5856L10.1818 11.5856L10.9586 13.8281L14.3831 13.8281L9.24627 0L8.21891 0L6.1642 0ZM7.19155 3.17671L9.10715 8.59582L5.27595 8.59582Z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 861 B |
|
@ -1,300 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg4198"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.42+devel"
|
||||
sodipodi:docbase="/home/jimmac/gfx/ximian/tango-icon-theme/scalable/actions"
|
||||
sodipodi:docname="format-indent-less.svg">
|
||||
<defs
|
||||
id="defs4200">
|
||||
<linearGradient
|
||||
id="linearGradient5157">
|
||||
<stop
|
||||
style="stop-color:#555753"
|
||||
offset="0"
|
||||
id="stop5159" />
|
||||
<stop
|
||||
style="stop-color:#555753;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5161" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2591">
|
||||
<stop
|
||||
style="stop-color:#9db029;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2593" />
|
||||
<stop
|
||||
style="stop-color:#869623;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2595" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3558">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3560" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3562" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3558"
|
||||
id="radialGradient3564"
|
||||
cx="22.571428"
|
||||
cy="30.857143"
|
||||
fx="22.571428"
|
||||
fy="30.857143"
|
||||
r="15.571428"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651376,4.638648e-15,10.75754)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient15218">
|
||||
<stop
|
||||
style="stop-color:#f8f8f7;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15220" />
|
||||
<stop
|
||||
id="stop2269"
|
||||
offset="0.59928656"
|
||||
style="stop-color:#e8e8e8;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#e2e2de;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop15222" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15218"
|
||||
id="linearGradient15224"
|
||||
x1="22.308331"
|
||||
y1="18.992140"
|
||||
x2="35.785294"
|
||||
y2="39.498238"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.060837,0.000000,0.000000,0.987595,4.641161,4.108291)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2259">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2261" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2263" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2259"
|
||||
id="linearGradient2265"
|
||||
x1="26.076092"
|
||||
y1="26.696676"
|
||||
x2="30.811172"
|
||||
y2="42.007351"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.993566,0.000000,0.000000,1.000000,6.219859,4.033411)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2216">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2218" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2220" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2216"
|
||||
id="linearGradient2222"
|
||||
x1="36.8125"
|
||||
y1="39.15625"
|
||||
x2="39.0625"
|
||||
y2="42.0625"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(6.161836,4.033411)" />
|
||||
<linearGradient
|
||||
id="linearGradient2224">
|
||||
<stop
|
||||
style="stop-color:#7c7c7c;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2226" />
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2228" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15218"
|
||||
id="linearGradient2240"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.342704,0.000000,0.000000,1.235378,-8.219611,-6.577189)"
|
||||
x1="20.794008"
|
||||
y1="18.378813"
|
||||
x2="35.596001"
|
||||
y2="39.60046" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5157"
|
||||
id="linearGradient5163"
|
||||
x1="10.729691"
|
||||
y1="26.422195"
|
||||
x2="2.3941064"
|
||||
y2="26.422195"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.188000,0.000000,0.000000,1.188000,38.20277,4.174916)" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#bebebe"
|
||||
borderopacity="0.28627451"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.313708"
|
||||
inkscape:cx="32.761989"
|
||||
inkscape:cy="19.079251"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="770"
|
||||
inkscape:window-height="852"
|
||||
inkscape:window-x="395"
|
||||
inkscape:window-y="881"
|
||||
inkscape:showpageshadow="false"
|
||||
fill="#555753" />
|
||||
<metadata
|
||||
id="metadata4203">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Unindent</dc:title>
|
||||
<dc:date></dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>indent</rdf:li>
|
||||
<rdf:li>less</rdf:li>
|
||||
<rdf:li>unindent</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.47368421;color:#000000;fill:url(#radialGradient3564);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3556"
|
||||
sodipodi:cx="22.571428"
|
||||
sodipodi:cy="30.857143"
|
||||
sodipodi:rx="15.571428"
|
||||
sodipodi:ry="10.142858"
|
||||
d="M 38.142857 30.857143 A 15.571428 10.142858 0 1 1 7,30.857143 A 15.571428 10.142858 0 1 1 38.142857 30.857143 z"
|
||||
transform="matrix(1.472335,0.000000,0.000000,0.266385,-9.159070,37.48203)" />
|
||||
<rect
|
||||
style="opacity:1;fill:url(#linearGradient2240);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4238"
|
||||
width="38.996792"
|
||||
height="45.003101"
|
||||
x="4.5016017"
|
||||
y="1.4968988"
|
||||
rx="0.56650788"
|
||||
ry="0.56650823" />
|
||||
<rect
|
||||
style="color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4248"
|
||||
width="17.63052"
|
||||
height="2"
|
||||
x="10"
|
||||
y="6" />
|
||||
<rect
|
||||
y="10"
|
||||
x="10"
|
||||
height="2"
|
||||
width="16.324554"
|
||||
id="rect4250"
|
||||
style="color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
<rect
|
||||
style="color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4252"
|
||||
width="15"
|
||||
height="2"
|
||||
x="10"
|
||||
y="14" />
|
||||
<rect
|
||||
y="18"
|
||||
x="10"
|
||||
height="2"
|
||||
width="17.63052"
|
||||
id="rect4254"
|
||||
style="color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
<rect
|
||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2245"
|
||||
width="37.025566"
|
||||
height="43.022316"
|
||||
x="5.4997125"
|
||||
y="2.4997177"
|
||||
rx="0"
|
||||
ry="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path8643"
|
||||
d="M 35.851425,26.743533 L 35.851425,38.610554 L 22.739004,38.610554 L 22.739004,44.458667 L 9,32.651858 L 22.741562,21 L 22.741562,26.747164 L 35.851425,26.743533 z "
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient5163);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 11 KiB |
|
@ -1,295 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg4198"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.42+devel"
|
||||
sodipodi:docbase="/home/jimmac/gfx/ximian/tango-icon-theme/scalable/actions"
|
||||
sodipodi:docname="format-indent-more.svg">
|
||||
<defs
|
||||
id="defs4200">
|
||||
<linearGradient
|
||||
id="linearGradient5157">
|
||||
<stop
|
||||
style="stop-color:#555753"
|
||||
offset="0"
|
||||
id="stop5159" />
|
||||
<stop
|
||||
style="stop-color:#555753;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5161" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2591">
|
||||
<stop
|
||||
style="stop-color:#9db029;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2593" />
|
||||
<stop
|
||||
style="stop-color:#869623;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2595" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3558">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3560" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3562" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3558"
|
||||
id="radialGradient3564"
|
||||
cx="22.571428"
|
||||
cy="30.857143"
|
||||
fx="22.571428"
|
||||
fy="30.857143"
|
||||
r="15.571428"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651376,4.638648e-15,10.75754)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient15218">
|
||||
<stop
|
||||
style="stop-color:#f8f8f7;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15220" />
|
||||
<stop
|
||||
id="stop2269"
|
||||
offset="0.59928656"
|
||||
style="stop-color:#e8e8e8;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#e2e2de;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop15222" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15218"
|
||||
id="linearGradient15224"
|
||||
x1="22.308331"
|
||||
y1="18.992140"
|
||||
x2="35.785294"
|
||||
y2="39.498238"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.060837,0.000000,0.000000,0.987595,4.641161,4.108291)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2259">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2261" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2263" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2259"
|
||||
id="linearGradient2265"
|
||||
x1="26.076092"
|
||||
y1="26.696676"
|
||||
x2="30.811172"
|
||||
y2="42.007351"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.993566,0.000000,0.000000,1.000000,6.219859,4.033411)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2216">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2218" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2220" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2216"
|
||||
id="linearGradient2222"
|
||||
x1="36.8125"
|
||||
y1="39.15625"
|
||||
x2="39.0625"
|
||||
y2="42.0625"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(6.161836,4.033411)" />
|
||||
<linearGradient
|
||||
id="linearGradient2224">
|
||||
<stop
|
||||
style="stop-color:#7c7c7c;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2226" />
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2228" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15218"
|
||||
id="linearGradient2240"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.342704,0.000000,0.000000,1.235378,-8.219611,-6.577189)"
|
||||
x1="20.794008"
|
||||
y1="18.378813"
|
||||
x2="35.596001"
|
||||
y2="39.60046" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5157"
|
||||
id="linearGradient5163"
|
||||
x1="10.729691"
|
||||
y1="26.422195"
|
||||
x2="2.3941064"
|
||||
y2="26.422195"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.188000,0.000000,0.000000,1.188000,6.648659,4.174916)" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#bebebe"
|
||||
borderopacity="0.28627451"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.313708"
|
||||
inkscape:cx="32.761989"
|
||||
inkscape:cy="19.079251"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="770"
|
||||
inkscape:window-height="852"
|
||||
inkscape:window-x="395"
|
||||
inkscape:window-y="881"
|
||||
inkscape:showpageshadow="false"
|
||||
fill="#555753" />
|
||||
<metadata
|
||||
id="metadata4203">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Indent More</dc:title>
|
||||
<dc:date></dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>indent</rdf:li>
|
||||
<rdf:li>more</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:identifier>http://jimmac.musichall.cz</dc:identifier>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.47368421;color:#000000;fill:url(#radialGradient3564);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3556"
|
||||
sodipodi:cx="22.571428"
|
||||
sodipodi:cy="30.857143"
|
||||
sodipodi:rx="15.571428"
|
||||
sodipodi:ry="10.142858"
|
||||
d="M 38.142857 30.857143 A 15.571428 10.142858 0 1 1 7,30.857143 A 15.571428 10.142858 0 1 1 38.142857 30.857143 z"
|
||||
transform="matrix(1.472335,0.000000,0.000000,0.266385,-9.159070,37.48203)" />
|
||||
<rect
|
||||
style="opacity:1;fill:url(#linearGradient2240);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4238"
|
||||
width="38.996792"
|
||||
height="45.003101"
|
||||
x="4.5016017"
|
||||
y="1.4968988"
|
||||
rx="0.56650788"
|
||||
ry="0.56650823" />
|
||||
<rect
|
||||
style="color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4248"
|
||||
width="12.000005"
|
||||
height="2"
|
||||
x="26.00001"
|
||||
y="6" />
|
||||
<rect
|
||||
y="10"
|
||||
x="26.00001"
|
||||
height="2"
|
||||
width="11.111115"
|
||||
id="rect4250"
|
||||
style="color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
<rect
|
||||
style="color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4252"
|
||||
width="10.209573"
|
||||
height="2"
|
||||
x="26.00001"
|
||||
y="14" />
|
||||
<rect
|
||||
y="18"
|
||||
x="26.00001"
|
||||
height="2"
|
||||
width="12.000005"
|
||||
id="rect4254"
|
||||
style="color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
<rect
|
||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2245"
|
||||
width="37.025566"
|
||||
height="43.022316"
|
||||
x="5.4997125"
|
||||
y="2.4997177"
|
||||
rx="0"
|
||||
ry="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path8643"
|
||||
d="M 9,26.743533 L 9,38.610554 L 22.112421,38.610554 L 22.112421,44.458667 L 35.851425,32.651858 L 22.109863,21 L 22.109863,26.747164 L 9,26.743533 z "
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient5163);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 11 KiB |
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<!-- Created using Karbon, part of Calligra: http://www.calligra.org/karbon -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16">
|
||||
<g id="layer5"/><g id="layer2">
|
||||
<path id="path2211" transform="translate(1.99698, 0.976621)" fill="#000000" fill-rule="evenodd" stroke="#000000" stroke-width="1.00000000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4.00000000000" d="M9.01429 0L0 13.4464L1.9531 13.4464L3.90334 10.5391L9.76548 10.5391L9.76548 13.4464L11.2679 13.4464L11.2679 0ZM9.76548 1.81708L9.76548 8.72201L5.12224 8.72201Z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 772 B |
Before Width: | Height: | Size: 581 B |
|
@ -1,104 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<!-- Created using Karbon, part of Calligra: http://www.calligra.org/karbon -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="12.8pt" height="12.8pt">
|
||||
<defs>
|
||||
<linearGradient id="gradient0" gradientTransform="translate(-0.54277, -2.50102)" gradientUnits="objectBoundingBox" x1="0.46156580718" y1="0.26673472489" x2="0.46156580718" y2="1.13340132578" spreadMethod="pad">
|
||||
<stop stop-color="#ffffff" offset="0.00000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#e6e6e6" offset="1.00000000000" stop-opacity="1.00000000000"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="gradient1" gradientTransform="translate(-0.54277, -2.50102)" gradientUnits="objectBoundingBox" x1="0.15385526906" y1="1.20006799200" x2="0.15385526906" y2="0.13340137911" spreadMethod="pad">
|
||||
<stop stop-color="#969696" offset="0.00000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#bebebe" offset="1.00000000000" stop-opacity="1.00000000000"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="gradient2" gradientTransform="matrix(0.415777 -0.417494 0.518983 0.514619 -17.796 1.86487)" gradientUnits="objectBoundingBox" x1="1.77989041379" y1="1.91182142950" x2="1.77989041379" y2="2.35319620460" spreadMethod="pad">
|
||||
<stop stop-color="#181818" offset="0.00000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#dbdbdb" offset="0.13482947648" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#a4a4a4" offset="0.20224422216" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#ffffff" offset="0.26965895295" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#8d8d8d" offset="0.44650277495" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#959595" offset="0.57114136219" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#cecece" offset="0.72038066387" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#181818" offset="1.00000000000" stop-opacity="1.00000000000"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="gradient3" gradientTransform="matrix(0.404023 -0.405692 0.607375 0.602268 -27.0463 -3.00744)" gradientUnits="objectBoundingBox" x1="9.40879825249" y1="7.83967975733" x2="9.40879825249" y2="9.41157739957" spreadMethod="pad">
|
||||
<stop stop-color="#565656" offset="0.00000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#9a9a9a" offset="0.50000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#545454" offset="1.00000000000" stop-opacity="1.00000000000"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="gradient4" gradientTransform="matrix(0.404023 -0.405692 0.607375 0.602268 -27.0463 -3.00744)" gradientUnits="objectBoundingBox" x1="9.40879584896" y1="7.83967765054" x2="9.40879584896" y2="9.41157487035" spreadMethod="pad">
|
||||
<stop stop-color="#b1b1b1" offset="0.00000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#ffffff" offset="0.50000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#8f8f8f" offset="1.00000000000" stop-opacity="1.00000000000"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="gradient5" gradientTransform="matrix(0.404023 -0.405692 0.607375 0.602268 -27.0463 -3.00744)" gradientUnits="objectBoundingBox" x1="9.40879155931" y1="7.83968201339" x2="9.40879155931" y2="9.41158010798" spreadMethod="pad">
|
||||
<stop stop-color="#565656" offset="0.00000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#9a9a9a" offset="0.50000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#545454" offset="1.00000000000" stop-opacity="1.00000000000"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="gradient6" gradientTransform="matrix(0.404023 -0.405692 0.607375 0.602268 -27.0463 -3.00744)" gradientUnits="objectBoundingBox" x1="9.40879343487" y1="7.83967992981" x2="9.40879343487" y2="9.41157760663" spreadMethod="pad">
|
||||
<stop stop-color="#b1b1b1" offset="0.00000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#ffffff" offset="0.50000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#8f8f8f" offset="1.00000000000" stop-opacity="1.00000000000"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="gradient7" gradientTransform="matrix(0.404023 -0.405692 0.607375 0.602268 -27.0463 -3.00744)" gradientUnits="objectBoundingBox" x1="9.40879945977" y1="7.83968103847" x2="9.40879945977" y2="9.41157893758" spreadMethod="pad">
|
||||
<stop stop-color="#565656" offset="0.00000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#9a9a9a" offset="0.50000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#545454" offset="1.00000000000" stop-opacity="1.00000000000"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="gradient8" gradientTransform="matrix(0.404023 -0.405692 0.607375 0.602268 -27.0463 -3.00744)" gradientUnits="objectBoundingBox" x1="9.40879596769" y1="7.83968060850" x2="9.40879596769" y2="9.41157842140" spreadMethod="pad">
|
||||
<stop stop-color="#b1b1b1" offset="0.00000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#ffffff" offset="0.50000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#8f8f8f" offset="1.00000000000" stop-opacity="1.00000000000"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="gradient9" gradientTransform="matrix(0.37638 0.0361526 0.0367 0.374874 -2.47809 -12.1224)" gradientUnits="objectBoundingBox" x1="1.13556603092" y1="7.77791347304" x2="1.95960901921" y2="8.61454878179" spreadMethod="pad">
|
||||
<stop stop-color="#dbce48" offset="0.00000000000" stop-opacity="1.00000000000"/>
|
||||
<stop stop-color="#c5b625" offset="1.00000000000" stop-opacity="1.00000000000"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="g3433">
|
||||
<g id="layer1-3" transform="translate(0.0427701, 1.4e-07)" fill="none">
|
||||
<path id="path2855" transform="translate(0.5, 0.5)" fill="url(#gradient0)" stroke="url(#gradient1)" stroke-width="1.00000012000" stroke-linecap="round" stroke-linejoin="round" d="M4.44089e-16 0L12.9572 0.01L12.9992 15L1e-08 15L0 1e-07Z"/>
|
||||
<g id="g4198" transform="translate(3, 3)" fill="none">
|
||||
<path id="path6035" transform="matrix(1.01954 0 0 1 0 -5.55112e-16)" fill="#686868" opacity="0.70000000000" d="M0 0L1.12407 0L1.12407 1L0 1Z"/>
|
||||
<path id="path6033" transform="matrix(1.01954 0 0 1 1.30215 0)" fill="#686868" opacity="0.70000000000" d="M0 0L1.06061 0L1.06061 1L0 1Z"/>
|
||||
<path id="path6031" transform="matrix(1.01954 0 0 1 2.5396 0)" fill="#686868" opacity="0.70000000000" d="M0 0L0.933684 0L0.933684 1L0 1Z"/>
|
||||
<path id="path6029" transform="matrix(1.01954 0 0 1 3.64764 0)" fill="#686868" opacity="0.70000000000" d="M0 0L0.410114 0L0.410114 1L0 1Z"/>
|
||||
<path id="path6027" transform="matrix(1.01954 0 0 1 4.22189 0)" fill="#686868" opacity="0.70000000000" d="M0 0L0.917815 0L0.917815 1L0 1Z"/>
|
||||
<path id="path6025" transform="matrix(1.01954 0 0 1 5.31375 0)" fill="#686868" opacity="0.70000000000" d="M0 0L2.37746 0L2.37746 1L0 1Z"/>
|
||||
<path id="path6017" transform="matrix(1.01954 0 0 1 5.55112e-16 6)" fill="#686868" opacity="0.70000000000" d="M0 0L1.12407 0L1.12407 1L0 1Z"/>
|
||||
<path id="path6015" transform="matrix(1.01954 0 0 1 1.30215 6)" fill="#686868" opacity="0.70000000000" d="M0 0L1.06061 0L1.06061 1L0 1Z"/>
|
||||
<path id="path6013" transform="matrix(1.01954 0 0 1 2.5396 6)" fill="#686868" opacity="0.70000000000" d="M0 0L0.933683 0L0.933683 1L0 1Z"/>
|
||||
<path id="path6011" transform="matrix(1.01954 0 0 1 3.64764 6)" fill="#686868" opacity="0.70000000000" d="M0 0L0.410114 0L0.410114 1L0 1Z"/>
|
||||
<path id="path6009" transform="matrix(1.01954 0 0 1 4.22188 6)" fill="#686868" opacity="0.70000000000" d="M0 0L0.917814 0L0.917814 1L0 1Z"/>
|
||||
<path id="path5999" transform="matrix(1.01954 0 0 1 5.55112e-16 2)" fill="#686868" opacity="0.70000000000" d="M0 0L1.74283 0L1.74283 1L0 1Z"/>
|
||||
<path id="path5997" transform="matrix(1.01954 0 0 1 1.93908 2)" fill="#686868" opacity="0.70000000000" d="M0 0L0.838487 0L0.838487 1L0 1Z"/>
|
||||
<path id="path5995" transform="matrix(1.01954 0 0 1 2.95613 2)" fill="#686868" opacity="0.70000000000" d="M0 0L0.394245 0L0.394245 1L0 1Z"/>
|
||||
<path id="path5993" transform="matrix(1.01954 0 0 1 3.52026 2)" fill="#686868" opacity="0.70000000000" d="M0 0L0.759159 0L0.759159 1L0 1Z"/>
|
||||
<path id="path5991" transform="matrix(1.01954 0 0 1 4.45643 2)" fill="#686868" opacity="0.70000000000" d="M0 0L0.759159 0L0.759159 1L0 1Z"/>
|
||||
<path id="path5989" transform="matrix(1.01954 0 0 1 5.39261 2)" fill="#686868" opacity="0.70000000000" d="M0 0L1.21926 0L1.21926 1L0 1Z"/>
|
||||
<path id="path5981" transform="matrix(1.01954 0 0 1 5.55112e-16 4)" fill="#686868" opacity="0.70000000000" d="M0 0L1.99668 0L1.99668 1L0 1Z"/>
|
||||
<path id="path5979" transform="matrix(1.01954 0 0 1 2.19529 4)" fill="#686868" opacity="0.70000000000" d="M0 0L2.13947 0L2.13947 1L0 1Z"/>
|
||||
<path id="path5977" transform="matrix(1.01954 0 0 1 4.53615 4)" fill="#686868" opacity="0.70000000000" d="M0 0L0.854355 0L0.854355 1L0 1Z"/>
|
||||
<path id="path5975" transform="matrix(1.01954 0 0 1 5.56679 4)" fill="#686868" opacity="0.70000000000" d="M0 0L2.01255 0L2.01255 1L0 1Z"/>
|
||||
<path id="path2916" transform="matrix(1.01954 0 0 1 5.55112e-16 8)" fill="#686868" opacity="0.70000000000" d="M0 0L1.12407 0L1.12407 1L0 1Z"/>
|
||||
<path id="path2918" transform="matrix(1.01954 0 0 1 1.30215 8)" fill="#686868" opacity="0.70000000000" d="M0 0L1.06061 0L1.06061 1L0 1Z"/>
|
||||
<path id="path2920" transform="matrix(1.01954 0 0 1 2.5396 8)" fill="#686868" opacity="0.70000000000" d="M0 0L0.933683 0L0.933683 1L0 1Z"/>
|
||||
</g>
|
||||
<path id="path2422" transform="translate(4.99643, 5.67071)" fill="#0c0c0c" fill-rule="evenodd" opacity="0.15000000000" d="M8.25732 0.0337698C8.17317 -0.0162002 8.10805 -0.00320017 8.06503 0.0245698L2.33547 3.70464L1.28095 4.38385L1.24848 4.39759L0 7.23529L3.09408 7.32929L3.11977 7.31195L4.18107 6.63633L9.9092 2.92453C10.0813 2.81332 9.80913 2.07626 9.29872 1.26826C8.91592 0.662266 8.50978 0.183633 8.25732 0.0337318Z"/>
|
||||
</g>
|
||||
<g id="g8626" transform="translate(5.00026, 1.99974)" fill="none">
|
||||
<path id="path3041" transform="matrix(0.702577 0 0 0.704261 1.4709 0.216394)" fill="url(#gradient2)" stroke="#0c0c0c" stroke-width="0.60797864000" stroke-linecap="butt" stroke-linejoin="round" d="M0 10.2519C0.286542 10.0442 1.14795 10.5083 1.96034 11.3138C2.77078 12.1174 3.22054 12.9551 3.0179 13.2444C3.01713 13.2455 3.03767 13.2621 3.03688 13.2632L13.1753 3.08288C13.4327 2.82441 12.9622 1.93926 12.1241 1.10813C11.2859 0.277 10.3959 -0.186931 10.1385 0.0715409Z"/>
|
||||
<path id="path3045" transform="matrix(0.702577 0 0 0.704261 1.4709 2.44622)" fill="#0c0c0c" opacity="0.60000000000" d="M0 7.08568C0.286543 6.87797 1.14795 7.34207 1.96034 8.14762C2.77078 8.95125 3.22054 9.78895 3.0179 10.0782C3.01713 10.0793 3.03767 10.0959 3.03688 10.097L10.0189 3.08615L10.0442 3.0608C10.0449 3.05972 10.0244 3.04308 10.0252 3.04198C10.2278 2.75273 9.77807 1.91503 8.96762 1.1114C8.15523 0.305847 7.29382 -0.158247 7.00728 0.0494597L6.98203 0.0748147L4e-07 7.08568Z"/>
|
||||
<path id="path3047" transform="matrix(0.702577 0 0 0.704261 6.48008 2.26929)" fill="url(#gradient3)" d="M0 0.176239C0.286541 -0.031468 1.14795 0.432627 1.96034 1.23818C2.77078 2.04181 3.22054 2.87951 3.0179 3.16876C3.01712 3.16986 3.03767 3.18649 3.03688 3.18758L3.16313 3.0608C3.16392 3.05972 3.14338 3.04308 3.14415 3.04198C3.3468 2.75273 2.89704 1.91503 2.0866 1.1114C1.27421 0.305848 0.412799 -0.158247 0.126257 0.0494596Z"/>
|
||||
<path id="path3049" transform="matrix(0.702577 0 0 0.704261 6.39879 2.35112)" fill="url(#gradient4)" d="M0 0.176239C0.286544 -0.0314677 1.14795 0.432627 1.96034 1.23818C2.77078 2.04181 3.22054 2.87951 3.0179 3.16876C3.01712 3.16986 3.03767 3.1865 3.03688 3.18758L3.16313 3.0608C3.16392 3.05972 3.14338 3.04308 3.14415 3.04198C3.3468 2.75273 2.89704 1.91503 2.0866 1.1114C1.27421 0.305848 0.4128 -0.158247 0.126257 0.0494597Z"/>
|
||||
<path id="path3051" transform="matrix(0.702577 0 0 0.704261 6.76258 1.98495)" fill="url(#gradient5)" d="M0 0.176239C0.286543 -0.0314683 1.14795 0.432626 1.96034 1.23818C2.77078 2.04181 3.22054 2.87951 3.0179 3.16876C3.01712 3.16986 3.03767 3.18649 3.03688 3.18758L3.16313 3.0608C3.16393 3.05972 3.14338 3.04308 3.14415 3.04198C3.3468 2.75273 2.89704 1.91503 2.0866 1.1114C1.27421 0.305847 0.412801 -0.158247 0.126257 0.0494597Z"/>
|
||||
<path id="path3053" transform="matrix(0.702577 0 0 0.704261 6.68128 2.06678)" fill="url(#gradient6)" d="M0 0.176239C0.286544 -0.0314685 1.14795 0.432626 1.96034 1.23818C2.77078 2.04181 3.22054 2.87951 3.0179 3.16876C3.01713 3.16986 3.03767 3.18649 3.03688 3.18758L3.16313 3.0608C3.16392 3.05972 3.14338 3.04308 3.14415 3.04198C3.3468 2.75273 2.89704 1.91503 2.0866 1.1114C1.27421 0.305848 0.412801 -0.158247 0.126257 0.0494597Z"/>
|
||||
<path id="path3055" transform="matrix(0.702577 0 0 0.704261 7.04643 1.69924)" fill="url(#gradient7)" d="M0 0.176238C0.286541 -0.0314683 1.14795 0.432626 1.96034 1.23818C2.77078 2.04181 3.22054 2.87951 3.0179 3.16876C3.01713 3.16986 3.03767 3.18649 3.03688 3.18758L3.16313 3.0608C3.16392 3.05972 3.14338 3.04308 3.14415 3.04198C3.3468 2.75273 2.89704 1.91503 2.08659 1.1114C1.27421 0.305847 0.412799 -0.158247 0.126256 0.0494597Z"/>
|
||||
<path id="path3057" transform="matrix(0.702577 0 0 0.704261 6.96514 1.78107)" fill="url(#gradient8)" d="M0 0.176238C0.286541 -0.0314687 1.14795 0.432626 1.96034 1.23818C2.77078 2.04181 3.22054 2.87951 3.0179 3.16876C3.01712 3.16986 3.03767 3.18649 3.03688 3.18758L3.16313 3.0608C3.16392 3.05972 3.14338 3.04308 3.14415 3.04198C3.3468 2.75273 2.89704 1.91503 2.0866 1.1114C1.27421 0.305848 0.412799 -0.158247 0.126257 0.0494599Z"/>
|
||||
<path id="path3059" transform="matrix(0.702577 0 0 0.704261 0.213987 7.40255)" fill="#dcdcdc" fill-rule="evenodd" stroke="#cccccc" stroke-width="0.60797864000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4.00000000000" d="M0 4.80486L4.77186 3.07937L4.81116 3.04011C5.01381 2.75087 4.55877 1.91283 3.74832 1.1092C2.93593 0.303642 2.07564 -0.158082 1.7891 0.0496248Z"/>
|
||||
<path id="path3061" transform="matrix(0.702577 0 0 0.704261 0.213576 9.8794)" fill="#0c0c0c" fill-rule="evenodd" stroke="#0c0c0c" stroke-width="0.60797864000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4.00000000000" d="M0.485212 0L0 1.28269L1.30137 0.809298C1.18769 0.676163 1.08209 0.541463 0.947014 0.407525C0.791507 0.253326 0.639934 0.126858 0.485212 0Z"/>
|
||||
<path id="path3043" transform="matrix(0.702577 0 0 0.704261 7.45448 0.214088)" fill="#c0c0c0" stroke="#cccccc" stroke-width="0.60797864000" stroke-linecap="butt" stroke-linejoin="round" opacity="0.80000000000" d="M0 1.70187C0.286542 1.49416 1.14795 1.95826 1.96034 2.76381C2.77078 3.56744 3.22054 4.40514 3.01789 4.69439C3.01713 4.69549 3.03766 4.71213 3.03688 4.71321L4.58881 3.15609C4.99729 2.74751 4.55953 2.06327 3.60744 1.1114C2.79505 0.305848 1.93364 -0.158247 1.6471 0.0494596L1.62185 0.0748155L3e-06 1.70187Z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 14 KiB |
|
@ -1,269 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg4198"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.42+0.43pre1"
|
||||
sodipodi:docbase="/home/andreas/projekt/bild/tango/scalable"
|
||||
sodipodi:docname="format-justify-center.svg">
|
||||
<defs
|
||||
id="defs4200">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3558">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3560" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3562" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3558"
|
||||
id="radialGradient3564"
|
||||
cx="22.571428"
|
||||
cy="30.857143"
|
||||
fx="22.571428"
|
||||
fy="30.857143"
|
||||
r="15.571428"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651376,4.638648e-15,10.75754)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient15218">
|
||||
<stop
|
||||
style="stop-color:#f8f8f7;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15220" />
|
||||
<stop
|
||||
id="stop2269"
|
||||
offset="0.59928656"
|
||||
style="stop-color:#e8e8e8;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#e2e2de;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop15222" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15218"
|
||||
id="linearGradient15224"
|
||||
x1="22.308331"
|
||||
y1="18.992140"
|
||||
x2="35.785294"
|
||||
y2="39.498238"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.060837,0.000000,0.000000,0.987595,4.641161,4.108291)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2259">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2261" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2263" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2259"
|
||||
id="linearGradient2265"
|
||||
x1="26.076092"
|
||||
y1="26.696676"
|
||||
x2="30.811172"
|
||||
y2="42.007351"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.993566,0.000000,0.000000,1.000000,6.219859,4.033411)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2216">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2218" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2220" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2216"
|
||||
id="linearGradient2222"
|
||||
x1="36.8125"
|
||||
y1="39.15625"
|
||||
x2="39.0625"
|
||||
y2="42.0625"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(6.161836,4.033411)" />
|
||||
<linearGradient
|
||||
id="linearGradient2224">
|
||||
<stop
|
||||
style="stop-color:#7c7c7c;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2226" />
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2228" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15218"
|
||||
id="linearGradient2240"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.342704,0.000000,0.000000,1.235378,-8.219611,-6.577189)"
|
||||
x1="20.794008"
|
||||
y1="18.378813"
|
||||
x2="35.596001"
|
||||
y2="39.60046" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#bebebe"
|
||||
borderopacity="1.0000000"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.313708"
|
||||
inkscape:cx="26.391074"
|
||||
inkscape:cy="26.321697"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="885"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata4203">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Justify Center</dc:title>
|
||||
<dc:date>2005-10-29</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>justify</rdf:li>
|
||||
<rdf:li>center</rdf:li>
|
||||
<rdf:li>format</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.47368421;color:#000000;fill:url(#radialGradient3564);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3556"
|
||||
sodipodi:cx="22.571428"
|
||||
sodipodi:cy="30.857143"
|
||||
sodipodi:rx="15.571428"
|
||||
sodipodi:ry="10.142858"
|
||||
d="M 38.142857 30.857143 A 15.571428 10.142858 0 1 1 7,30.857143 A 15.571428 10.142858 0 1 1 38.142857 30.857143 z"
|
||||
transform="matrix(1.472335,0.000000,0.000000,0.266385,-9.159070,37.48203)" />
|
||||
<rect
|
||||
style="opacity:1;fill:url(#linearGradient2240);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4238"
|
||||
width="38.996792"
|
||||
height="45.003101"
|
||||
x="4.5016017"
|
||||
y="1.4968988"
|
||||
rx="0.56650788"
|
||||
ry="0.56650823" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4248"
|
||||
width="26"
|
||||
height="2"
|
||||
x="-37"
|
||||
y="10"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
y="16"
|
||||
x="-35"
|
||||
height="2"
|
||||
width="23"
|
||||
id="rect4250"
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4252"
|
||||
width="21"
|
||||
height="2"
|
||||
x="-34"
|
||||
y="22"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
y="28"
|
||||
x="-37"
|
||||
height="2"
|
||||
width="26"
|
||||
id="rect4254"
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4256"
|
||||
width="17"
|
||||
height="2"
|
||||
x="-32"
|
||||
y="34"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2245"
|
||||
width="37.025566"
|
||||
height="43.022316"
|
||||
x="5.4997125"
|
||||
y="2.4997177"
|
||||
rx="0"
|
||||
ry="0" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 10 KiB |
|
@ -1,269 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg4198"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.42+0.43pre1"
|
||||
sodipodi:docbase="/home/andreas/projekt/bild/tango/scalable"
|
||||
sodipodi:docname="format-justify-fill.svg">
|
||||
<defs
|
||||
id="defs4200">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3558">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3560" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3562" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3558"
|
||||
id="radialGradient3564"
|
||||
cx="22.571428"
|
||||
cy="30.857143"
|
||||
fx="22.571428"
|
||||
fy="30.857143"
|
||||
r="15.571428"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651376,4.638648e-15,10.75754)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient15218">
|
||||
<stop
|
||||
style="stop-color:#f8f8f7;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15220" />
|
||||
<stop
|
||||
id="stop2269"
|
||||
offset="0.59928656"
|
||||
style="stop-color:#e8e8e8;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#e2e2de;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop15222" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15218"
|
||||
id="linearGradient15224"
|
||||
x1="22.308331"
|
||||
y1="18.992140"
|
||||
x2="35.785294"
|
||||
y2="39.498238"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.060837,0.000000,0.000000,0.987595,4.641161,4.108291)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2259">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2261" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2263" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2259"
|
||||
id="linearGradient2265"
|
||||
x1="26.076092"
|
||||
y1="26.696676"
|
||||
x2="30.811172"
|
||||
y2="42.007351"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.993566,0.000000,0.000000,1.000000,6.219859,4.033411)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2216">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2218" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2220" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2216"
|
||||
id="linearGradient2222"
|
||||
x1="36.8125"
|
||||
y1="39.15625"
|
||||
x2="39.0625"
|
||||
y2="42.0625"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(6.161836,4.033411)" />
|
||||
<linearGradient
|
||||
id="linearGradient2224">
|
||||
<stop
|
||||
style="stop-color:#7c7c7c;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2226" />
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2228" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15218"
|
||||
id="linearGradient2240"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.342704,0.000000,0.000000,1.235378,-8.219611,-6.577189)"
|
||||
x1="20.794008"
|
||||
y1="18.378813"
|
||||
x2="35.596001"
|
||||
y2="39.60046" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#bebebe"
|
||||
borderopacity="1.0000000"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="16"
|
||||
inkscape:cx="35.467019"
|
||||
inkscape:cy="15.522316"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="885"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata4203">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Justify Center</dc:title>
|
||||
<dc:date>2005-10-29</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>justify</rdf:li>
|
||||
<rdf:li>center</rdf:li>
|
||||
<rdf:li>format</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.47368421;color:#000000;fill:url(#radialGradient3564);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3556"
|
||||
sodipodi:cx="22.571428"
|
||||
sodipodi:cy="30.857143"
|
||||
sodipodi:rx="15.571428"
|
||||
sodipodi:ry="10.142858"
|
||||
d="M 38.142857 30.857143 A 15.571428 10.142858 0 1 1 7,30.857143 A 15.571428 10.142858 0 1 1 38.142857 30.857143 z"
|
||||
transform="matrix(1.472335,0.000000,0.000000,0.266385,-9.159070,37.48203)" />
|
||||
<rect
|
||||
style="opacity:1;fill:url(#linearGradient2240);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4238"
|
||||
width="38.996792"
|
||||
height="45.003101"
|
||||
x="4.5016017"
|
||||
y="1.4968988"
|
||||
rx="0.56650788"
|
||||
ry="0.56650823" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4248"
|
||||
width="30"
|
||||
height="2"
|
||||
x="-39"
|
||||
y="10"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
y="16"
|
||||
x="-39"
|
||||
height="2"
|
||||
width="30"
|
||||
id="rect4250"
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4252"
|
||||
width="30"
|
||||
height="2"
|
||||
x="-39"
|
||||
y="22"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
y="28"
|
||||
x="-39"
|
||||
height="2"
|
||||
width="30"
|
||||
id="rect4254"
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4256"
|
||||
width="30"
|
||||
height="2"
|
||||
x="-39"
|
||||
y="34"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2245"
|
||||
width="37.025566"
|
||||
height="43.022316"
|
||||
x="5.4997125"
|
||||
y="2.4997177"
|
||||
rx="0"
|
||||
ry="0" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 10 KiB |
|
@ -1,199 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg4198"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
|
||||
sodipodi:docname="format-justify-left.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs4200">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3558">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3560" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3562" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3558"
|
||||
id="radialGradient3564"
|
||||
cx="22.571428"
|
||||
cy="30.857143"
|
||||
fx="22.571428"
|
||||
fy="30.857143"
|
||||
r="15.571428"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651376,4.638648e-15,10.75754)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient15218">
|
||||
<stop
|
||||
style="stop-color:#f8f8f7;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15220" />
|
||||
<stop
|
||||
id="stop2269"
|
||||
offset="0.59928656"
|
||||
style="stop-color:#e8e8e8;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#e2e2de;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop15222" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15218"
|
||||
id="linearGradient2240"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.342704,0.000000,0.000000,1.235378,-8.219611,-6.577189)"
|
||||
x1="20.794008"
|
||||
y1="18.378813"
|
||||
x2="35.596001"
|
||||
y2="39.60046" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#bebebe"
|
||||
borderopacity="1.0000000"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.313708"
|
||||
inkscape:cx="39.426031"
|
||||
inkscape:cy="27.632093"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="885"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata4203">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Justify Left</dc:title>
|
||||
<dc:date>2005-10-29</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>justify</rdf:li>
|
||||
<rdf:li>left</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.47368421;color:#000000;fill:url(#radialGradient3564);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3556"
|
||||
sodipodi:cx="22.571428"
|
||||
sodipodi:cy="30.857143"
|
||||
sodipodi:rx="15.571428"
|
||||
sodipodi:ry="10.142858"
|
||||
d="M 38.142857 30.857143 A 15.571428 10.142858 0 1 1 7,30.857143 A 15.571428 10.142858 0 1 1 38.142857 30.857143 z"
|
||||
transform="matrix(1.472335,0.000000,0.000000,0.266385,-9.159070,37.48203)" />
|
||||
<rect
|
||||
style="opacity:1;fill:url(#linearGradient2240);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4238"
|
||||
width="38.996792"
|
||||
height="45.003101"
|
||||
x="4.5016017"
|
||||
y="1.4968988"
|
||||
rx="0.56650788"
|
||||
ry="0.56650823" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4248"
|
||||
width="27"
|
||||
height="2"
|
||||
x="9"
|
||||
y="10" />
|
||||
<rect
|
||||
y="16"
|
||||
x="9"
|
||||
height="2"
|
||||
width="25"
|
||||
id="rect4250"
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4252"
|
||||
width="22.971531"
|
||||
height="2"
|
||||
x="9"
|
||||
y="22" />
|
||||
<rect
|
||||
y="28"
|
||||
x="9"
|
||||
height="2"
|
||||
width="27"
|
||||
id="rect4254"
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4256"
|
||||
width="17"
|
||||
height="2"
|
||||
x="9"
|
||||
y="34" />
|
||||
<rect
|
||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2245"
|
||||
width="37.025566"
|
||||
height="43.022316"
|
||||
x="5.4997125"
|
||||
y="2.4997177"
|
||||
rx="0"
|
||||
ry="0" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 8.0 KiB |
|
@ -1,269 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg4198"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.42+0.43pre1"
|
||||
sodipodi:docbase="/home/andreas/projekt/bild/tango/scalable"
|
||||
sodipodi:docname="format-justify-right.svg">
|
||||
<defs
|
||||
id="defs4200">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3558">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3560" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3562" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3558"
|
||||
id="radialGradient3564"
|
||||
cx="22.571428"
|
||||
cy="30.857143"
|
||||
fx="22.571428"
|
||||
fy="30.857143"
|
||||
r="15.571428"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651376,4.638648e-15,10.75754)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient15218">
|
||||
<stop
|
||||
style="stop-color:#f8f8f7;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop15220" />
|
||||
<stop
|
||||
id="stop2269"
|
||||
offset="0.59928656"
|
||||
style="stop-color:#e8e8e8;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#e2e2de;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop15222" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15218"
|
||||
id="linearGradient15224"
|
||||
x1="22.308331"
|
||||
y1="18.992140"
|
||||
x2="35.785294"
|
||||
y2="39.498238"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.060837,0.000000,0.000000,0.987595,4.641161,4.108291)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2259">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2261" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2263" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2259"
|
||||
id="linearGradient2265"
|
||||
x1="26.076092"
|
||||
y1="26.696676"
|
||||
x2="30.811172"
|
||||
y2="42.007351"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.993566,0.000000,0.000000,1.000000,6.219859,4.033411)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2216">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2218" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2220" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2216"
|
||||
id="linearGradient2222"
|
||||
x1="36.8125"
|
||||
y1="39.15625"
|
||||
x2="39.0625"
|
||||
y2="42.0625"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(6.161836,4.033411)" />
|
||||
<linearGradient
|
||||
id="linearGradient2224">
|
||||
<stop
|
||||
style="stop-color:#7c7c7c;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2226" />
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2228" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15218"
|
||||
id="linearGradient2240"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.342704,0.000000,0.000000,1.235378,-8.219611,-6.577189)"
|
||||
x1="20.794008"
|
||||
y1="18.378813"
|
||||
x2="35.596001"
|
||||
y2="39.60046" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#bebebe"
|
||||
borderopacity="1.0000000"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.313708"
|
||||
inkscape:cx="31.951275"
|
||||
inkscape:cy="22.207013"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="885"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata4203">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Justify Right</dc:title>
|
||||
<dc:date>2005-10-29</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>justify</rdf:li>
|
||||
<rdf:li>left</rdf:li>
|
||||
<rdf:li>format</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.47368421;color:#000000;fill:url(#radialGradient3564);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3556"
|
||||
sodipodi:cx="22.571428"
|
||||
sodipodi:cy="30.857143"
|
||||
sodipodi:rx="15.571428"
|
||||
sodipodi:ry="10.142858"
|
||||
d="M 38.142857 30.857143 A 15.571428 10.142858 0 1 1 7,30.857143 A 15.571428 10.142858 0 1 1 38.142857 30.857143 z"
|
||||
transform="matrix(1.472335,0.000000,0.000000,0.266385,-9.159070,37.48203)" />
|
||||
<rect
|
||||
style="opacity:1;fill:url(#linearGradient2240);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect4238"
|
||||
width="38.996792"
|
||||
height="45.003101"
|
||||
x="4.5016017"
|
||||
y="1.4968988"
|
||||
rx="0.56650788"
|
||||
ry="0.56650823" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4248"
|
||||
width="27"
|
||||
height="2"
|
||||
x="-38.971531"
|
||||
y="10"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
y="16"
|
||||
x="-38.971531"
|
||||
height="2"
|
||||
width="25"
|
||||
id="rect4250"
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4252"
|
||||
width="22.971531"
|
||||
height="2"
|
||||
x="-38.971531"
|
||||
y="22"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
y="28"
|
||||
x="-38.971531"
|
||||
height="2"
|
||||
width="27"
|
||||
id="rect4254"
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect4256"
|
||||
width="17"
|
||||
height="2"
|
||||
x="-38.971531"
|
||||
y="34"
|
||||
transform="scale(-1.000000,1.000000)" />
|
||||
<rect
|
||||
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect2245"
|
||||
width="37.025566"
|
||||
height="43.022316"
|
||||
x="5.4997125"
|
||||
y="2.4997177"
|
||||
rx="0"
|
||||
ry="0" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 10 KiB |
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<!-- Created using Karbon, part of Calligra: http://www.calligra.org/karbon -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="12.8pt" height="12.8pt">
|
||||
<defs/>
|
||||
<g id="layer0">
|
||||
<path id="path2407" transform="translate(6, 4.5)" fill="none" stroke="#000000" stroke-width="0.99999994000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.00000000000" opacity="1" d="M0 4L8 4M0 0L8 0M0 8L8 8"/>
|
||||
<rect id="rect3728" transform="translate(2, 3)" fill="#000000" opacity="1" width="2pt" height="2pt"/>
|
||||
<rect id="rect2434" transform="translate(2, 11)" fill="#000000" stroke="#000000" stroke-width="0.00000000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.00000000000" opacity="1" width="2pt" height="2pt"/>
|
||||
<rect id="rect2440" transform="translate(2, 7)" fill="#000000" opacity="1" width="2pt" height="2pt"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.0 KiB |
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<!-- Created using Karbon, part of Calligra: http://www.calligra.org/karbon -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16">
|
||||
<defs/>
|
||||
<g id="layer5"/><g id="layer2">
|
||||
<path id="path2211" transform="translate(0.833333, 0.627451)" fill="#000000" fill-rule="evenodd" stroke="#000000" stroke-width="1.00000000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4.00000000000" d="M5.67248 0L0 14.3831L2.26899 14.3831L3.49803 11.2732L10.8723 11.2732L12.1013 14.3831L14.3703 14.3831L8.69781 0ZM7.18514 1.94366L10.1041 9.32958L4.26616 9.32958Z"/>
|
||||
<rect id="rect2331" transform="translate(0.603318, 6.51584)" fill="#000000" fill-rule="evenodd" stroke="#000000" stroke-width="1.00000000000" stroke-linecap="round" stroke-linejoin="round" width="11.75746606335pt" height="0.48265460030pt"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.0 KiB |
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<!-- Created using Karbon, part of Calligra: http://www.calligra.org/karbon -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16">
|
||||
<defs/>
|
||||
<g id="layer1">
|
||||
<path id="path2211" transform="translate(1.46667, 0.658333)" fill="#000000" fill-rule="evenodd" stroke="#000000" stroke-width="1.00000000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4.00000000000" d="M5.17763 0L0 12.4667L2.07105 12.4667L3.19287 9.77117L9.92379 9.77117L11.0456 12.4667L13.1167 12.4667L7.93904 0ZM6.55833 1.68468L9.22264 8.08649L3.89399 8.08649Z"/>
|
||||
<rect id="rect2331" transform="matrix(1 0 0 -1 1.23333 15)" fill="#000000" fill-rule="evenodd" stroke="#000000" stroke-width="1.00000000000" stroke-linecap="round" stroke-linejoin="round" width="10.90000000000pt" height="0.44664000000pt"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1007 B |
|
@ -1,72 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - Journal
|
||||
*
|
||||
* @author Thomas Tanghus
|
||||
* @copyright 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
$errors = array();
|
||||
$l = new OC_L10N('journal');
|
||||
OCP\User::checkLoggedIn();
|
||||
|
||||
$required_apps = array(
|
||||
array('id' => 'tal', 'name' => 'TAL Page Templates'),
|
||||
array('id' => 'journal', 'name' => 'Journal'),
|
||||
array('id' => 'contacts', 'name' => 'Contacts'),
|
||||
);
|
||||
foreach($required_apps as $app) {
|
||||
if(!OCP\App::isEnabled($app['id'])) {
|
||||
$error = (string)$l->t('The %%s app isn\'t enabled! Please enable it here: <strong><a href="%%s?appid=%%s">Enable %%s app</a></strong>');
|
||||
$errors[] = sprintf($error, $app['name'],OCP\Util::linkTo('settings', 'apps'), $app['id'], $app['name']);
|
||||
}
|
||||
}
|
||||
|
||||
if(count($errors) == 0) {
|
||||
$calendars = OC_Calendar_Calendar::allCalendars(OCP\User::getUser(), true);
|
||||
if( count($calendars) == 0 ) {
|
||||
$error = (string)$l->t('You have no calendars. Please add one at the <strong><a href="%%s">Calendar app</a></strong>');
|
||||
$errors[] = sprintf($error, OCP\Util::linkTo('calendar', 'index.php'));
|
||||
}
|
||||
// Load a specific entry?
|
||||
$id = isset( $_GET['id'] ) ? $_GET['id'] : null;
|
||||
|
||||
OCP\Util::addScript('3rdparty/timepicker', 'jquery.ui.timepicker');
|
||||
OCP\Util::addScript('contacts','jquery.multi-autocomplete');
|
||||
OCP\Util::addScript('','oc-vcategories');
|
||||
OCP\Util::addScript('journal', 'jquery.rte');
|
||||
OCP\Util::addScript('journal', 'jquery.textchange');
|
||||
OCP\Util::addScript('journal', 'journal');
|
||||
OCP\Util::addscript('tal','modernizr');
|
||||
OCP\Util::addStyle('3rdparty/timepicker', 'jquery.ui.timepicker');
|
||||
OCP\Util::addStyle('journal', 'rte');
|
||||
OCP\Util::addStyle('journal', 'journal');
|
||||
OCP\App::setActiveNavigationEntry('journal_index');
|
||||
|
||||
$categories = OC_Calendar_App::getCategoryOptions();
|
||||
}
|
||||
|
||||
//$tmpl = new OCP\Template('journal', 'journals', 'user');
|
||||
if($errors) {
|
||||
$tmpl = new OCP\Template( "journal", "rtfm", "user" );
|
||||
$tmpl->assign('errors',$errors, false);
|
||||
} else {
|
||||
$tmpl = new OC_TALTemplate('journal', 'index', 'user');
|
||||
$tmpl->assign('categories', $categories);
|
||||
$tmpl->assign('calendars', $calendars);
|
||||
$tmpl->assign('id',$id);
|
||||
}
|
||||
$tmpl->printPage();
|
|
@ -1,118 +0,0 @@
|
|||
// Expanding Textareas
|
||||
// https://github.com/bgrins/ExpandingTextareas
|
||||
|
||||
(function(factory) {
|
||||
// Add jQuery via AMD registration or browser globals
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define([ 'jquery' ], factory);
|
||||
}
|
||||
else {
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function ($) {
|
||||
$.expandingTextarea = $.extend({
|
||||
autoInitialize: true,
|
||||
initialSelector: "textarea.expanding",
|
||||
opts: {
|
||||
resize: function() { }
|
||||
}
|
||||
}, $.expandingTextarea || {});
|
||||
|
||||
var cloneCSSProperties = [
|
||||
'lineHeight', 'textDecoration', 'letterSpacing',
|
||||
'fontSize', 'fontFamily', 'fontStyle',
|
||||
'fontWeight', 'textTransform', 'textAlign',
|
||||
'direction', 'wordSpacing', 'fontSizeAdjust',
|
||||
'wordWrap',
|
||||
'borderLeftWidth', 'borderRightWidth',
|
||||
'borderTopWidth','borderBottomWidth',
|
||||
'paddingLeft', 'paddingRight',
|
||||
'paddingTop','paddingBottom',
|
||||
'marginLeft', 'marginRight',
|
||||
'marginTop','marginBottom',
|
||||
'boxSizing', 'webkitBoxSizing', 'mozBoxSizing', 'msBoxSizing'
|
||||
];
|
||||
|
||||
var textareaCSS = {
|
||||
position: "absolute",
|
||||
height: "100%",
|
||||
resize: "none"
|
||||
};
|
||||
|
||||
var preCSS = {
|
||||
visibility: "hidden",
|
||||
border: "0 solid",
|
||||
whiteSpace: "pre-wrap"
|
||||
};
|
||||
|
||||
var containerCSS = {
|
||||
position: "relative"
|
||||
};
|
||||
|
||||
function resize() {
|
||||
$(this).closest('.expandingText').find("div").text(this.value + ' ');
|
||||
$(this).trigger("resize.expanding");
|
||||
}
|
||||
|
||||
$.fn.expandingTextarea = function(o) {
|
||||
|
||||
var opts = $.extend({ }, $.expandingTextarea.opts, o);
|
||||
|
||||
if (o === "resize") {
|
||||
return this.trigger("input.expanding");
|
||||
}
|
||||
|
||||
if (o === "destroy") {
|
||||
this.filter(".expanding-init").each(function() {
|
||||
var textarea = $(this).removeClass('expanding-init');
|
||||
var container = textarea.closest('.expandingText');
|
||||
|
||||
container.before(textarea).remove();
|
||||
textarea
|
||||
.attr('style', textarea.data('expanding-styles') || '')
|
||||
.removeData('expanding-styles');
|
||||
});
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
this.filter("textarea").not(".expanding-init").addClass("expanding-init").each(function() {
|
||||
var textarea = $(this);
|
||||
|
||||
textarea.wrap("<div class='expandingText'></div>");
|
||||
textarea.after("<pre class='textareaClone'><div></div></pre>");
|
||||
|
||||
var container = textarea.parent().css(containerCSS);
|
||||
var pre = container.find("pre").css(preCSS);
|
||||
|
||||
// Store the original styles in case of destroying.
|
||||
textarea.data('expanding-styles', textarea.attr('style'));
|
||||
textarea.css(textareaCSS);
|
||||
|
||||
$.each(cloneCSSProperties, function(i, p) {
|
||||
var val = textarea.css(p);
|
||||
|
||||
// Only set if different to prevent overriding percentage css values.
|
||||
if (pre.css(p) !== val) {
|
||||
pre.css(p, val);
|
||||
}
|
||||
});
|
||||
|
||||
textarea.bind("input.expanding propertychange.expanding", resize);
|
||||
resize.apply(this);
|
||||
|
||||
if (opts.resize) {
|
||||
textarea.bind("resize.expanding", opts.resize);
|
||||
}
|
||||
});
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
$(function () {
|
||||
if ($.expandingTextarea.autoInitialize) {
|
||||
$($.expandingTextarea.initialSelector).expandingTextarea();
|
||||
}
|
||||
});
|
||||
|
||||
}));
|
|
@ -1,432 +0,0 @@
|
|||
String.prototype.unEscape = function(){
|
||||
str = this;
|
||||
return str.replace(/\\"/g, '"');
|
||||
};
|
||||
String.prototype.stripTags = function(){
|
||||
tags = this;
|
||||
stripped = tags.replace(/<(.|\n)*?>/g, '');
|
||||
return stripped;
|
||||
};
|
||||
String.prototype.zeroPad = function(digits) {
|
||||
n = this.toString();
|
||||
while (n.length < digits) {
|
||||
n = '0' + n;
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
OC.Journal = {
|
||||
init:function() {
|
||||
this.setEnabled(false);
|
||||
// Fetch journal entries. If it's a direct link 'id' will be loaded.
|
||||
OC.Journal.Journals.update(id);
|
||||
},
|
||||
categoriesChanged:function(newcategories) { // Categories added/deleted.
|
||||
categories = $.map(newcategories, function(v) {return v;});
|
||||
$('#categories').multiple_autocomplete('option', 'source', categories);
|
||||
var categorylist = $('#categories_value').find('input');
|
||||
$.getJSON(OC.filePath('journal', 'ajax', 'categories/categoriesfor.php'),{'id':Contacts.UI.Card.id},function(jsondata){
|
||||
if(jsondata.status == 'success'){
|
||||
$('#categories_value').data('checksum', jsondata.data.checksum);
|
||||
categorylist.val(jsondata.data.value);
|
||||
} else {
|
||||
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
|
||||
}
|
||||
});
|
||||
},
|
||||
propertyContainerFor:function(obj) {
|
||||
if($(obj).hasClass('propertycontainer')) {
|
||||
return $(obj);
|
||||
}
|
||||
return $(obj).parents('.propertycontainer').first();
|
||||
},
|
||||
required:function(event){ // eventhandler for required elements
|
||||
// FIXME: This doesn't seem to work.
|
||||
console.log('blur on required');
|
||||
var obj = $(event.target);
|
||||
$(obj).addClass('required');
|
||||
if($(this).val().trim() == '') {
|
||||
$('<strong>This field is required!</strong>').appendTo($(obj));
|
||||
return;
|
||||
} else {
|
||||
$(obj).removeClass('required');
|
||||
$(obj).off('blur', OC.Journal.required);
|
||||
}
|
||||
},
|
||||
setEnabled:function(state) {
|
||||
if(state == undefined) { state = true; }
|
||||
console.log('OC.Journal.setEnabled: ' + state);
|
||||
if(state) {
|
||||
$('#description').rte('setEnabled', true);
|
||||
if($('#description').rte('mode') == 'html') {
|
||||
$('#editortoolbar li').show();
|
||||
}
|
||||
$('#togglemode').show();
|
||||
$('#summary').addClass('editable');
|
||||
$('.property,#also_time').each(function () {
|
||||
$(this).attr('disabled', false);
|
||||
});
|
||||
} else {
|
||||
$('#description').rte('setEnabled', false);
|
||||
$('#editortoolbar .richtext, #togglemode').hide();
|
||||
$('#summary').removeClass('editable');
|
||||
$('.property,#also_time').each(function () {
|
||||
$(this).attr('disabled', true);
|
||||
});
|
||||
}
|
||||
},
|
||||
toggleMode:function() {
|
||||
console.log('togglemode');
|
||||
$('#description').rte('toggleMode');
|
||||
$('#editortoolbar li.richtext').toggle();
|
||||
},
|
||||
Entry:{
|
||||
id:'',
|
||||
data:undefined,
|
||||
add:function() {
|
||||
// TODO: wrap a DIV around the summary field with a suggestion(?) to fill out this field first. See OC.Journal.required
|
||||
// Remember to reenable all controls.
|
||||
$('#leftcontent lidata-id="'+this.id+'"').removeClass('active');
|
||||
this.id = 'new';
|
||||
this.data = undefined;
|
||||
$('.property').each(function () {
|
||||
switch($(this).get(0).nodeName) {
|
||||
case 'DIV':
|
||||
$(this).html('');
|
||||
break;
|
||||
case 'INPUT':
|
||||
case 'TEXTAREA':
|
||||
$(this).val('');
|
||||
break;
|
||||
default:
|
||||
console.log('OC.Journal.Entry.add. Forgot: ' + $(this).get(0).nodeName);
|
||||
break;
|
||||
}
|
||||
});
|
||||
$('#description').rte('setEnabled', false);
|
||||
$('#editortoolbar li.richtext').hide();
|
||||
$('#editable').attr('checked', true);
|
||||
OC.Journal.setEnabled(true);
|
||||
},
|
||||
createEntry:function(data) {
|
||||
var date = new Date(parseInt(data.dtstart)*1000);
|
||||
var timestring = (data.only_date?'':' ' + date.toLocaleTimeString());
|
||||
return $('<li data-id="'+data.id+'"><a href="'+OC.linkTo('journal', 'index.php')+'&id='+data.id+'">'+data.summary.unEscape()+'</a><br /><em>'+date.toDateString()+timestring+'<em></li>').data('entry', data);
|
||||
},
|
||||
loadEntry:function(id, data) {
|
||||
//$(document).off('change', '.property');
|
||||
console.log('loadEntry: ' + id + ': ' + data.summary);
|
||||
this.id = id;
|
||||
this.data = data;
|
||||
$('#entry').data('id', id);
|
||||
console.log('summary: ' + data.summary.unEscape());
|
||||
$('#summary').val(data.summary.unEscape());
|
||||
$('#organizer').val(data.organizer.value.split(':')[1]);
|
||||
var format = data.description.format;
|
||||
console.log('format: '+format);
|
||||
$('#description').rte(format, data.description.value.unEscape());
|
||||
$('#description').rte('mode', format);
|
||||
//$('#description').expandingTextarea('resize');
|
||||
(format=='html'&&$('#editable').get(0).checked?$('#editortoolbar li.richtext').show():$('#editortoolbar li.richtext').hide());
|
||||
$('#location').val(data.location);
|
||||
$('#categories').val(data.categories.join(','));
|
||||
$('#categories').multiple_autocomplete('option', 'source', categories);
|
||||
console.log('Trying to parse: '+data.dtstart);
|
||||
var date = new Date(parseInt(data.dtstart)*1000);
|
||||
//$('#dtstartdate').val(date.getDate()+'-'+date.getMonth()+'-'+date.getFullYear()); //
|
||||
$('#dtstartdate').datepicker('setDate', date);
|
||||
if(data.only_date) {
|
||||
$('#dtstarttime').hide();
|
||||
$('#also_time').attr('checked', false);
|
||||
//$('#also_time').get(0).checked = false;
|
||||
} else {
|
||||
// timepicker('setTime', ...) triggers a 'change' event, so you have to jump through hoops here ;-)
|
||||
$('#dtstarttime').val(date.getHours().toString().zeroPad(2)+':'+date.getMinutes().toString().zeroPad(2));
|
||||
$('#dtstarttime').show();
|
||||
$('#also_time').attr('checked', true);
|
||||
//$('#also_time').get(0).checked = true;
|
||||
}
|
||||
console.log('dtstart: '+date);
|
||||
},
|
||||
saveproperty:function(obj) {
|
||||
if(!this.id) { // we are adding an entry and want a response back from the server.
|
||||
this.id = 'new';
|
||||
console.log('OC.Journal.Entry.saveproperty: We need to add a new one.');
|
||||
//return;
|
||||
}
|
||||
var container = OC.Journal.propertyContainerFor(obj);
|
||||
var params = {'id':this.id};
|
||||
params['type'] = container.data('type');
|
||||
params['parameters'] = {};
|
||||
switch(params['type']) {
|
||||
case 'ORGANIZER':
|
||||
case 'LOCATION':
|
||||
case 'CATEGORIES':
|
||||
params['value'] = $(obj).val();
|
||||
break;
|
||||
case 'SUMMARY':
|
||||
if(this.id == 'new' && $(obj).val().trim() == '') {
|
||||
$(obj).focus();
|
||||
$(obj).addClass('required');
|
||||
$(obj).on('blur', OC.Journal.required);
|
||||
return;
|
||||
}
|
||||
params['value'] = $(obj).val();
|
||||
break;
|
||||
case 'DESCRIPTION':
|
||||
// Check if we get the description from the textarea or the contenteditable.
|
||||
var format = ($(obj).get(0).nodeName == 'DIV' ? 'html' : 'text'); // FIXME: should check rte instead.
|
||||
var value = $('#description').rte(format); // calls either the 'text' or 'html' method of the rte.
|
||||
//var value = ($(obj).get(0).nodeName == 'DIV' ? $(obj).html() : $(obj).text());
|
||||
console.log('nodeName: ' + $(obj).get(0).nodeName);
|
||||
params['value'] = value;
|
||||
params['parameters']['FORMAT'] = format.toUpperCase();
|
||||
break;
|
||||
case 'DTSTART':
|
||||
var date = $('#dtstartdate').val();
|
||||
var time = $('#dtstarttime').val();
|
||||
var datetime = new Date(parseInt(date.substring(6, 10)), parseInt(date.substring(3, 5)), parseInt(date.substring(0, 2)) , parseInt(time.substring(0, 2)), parseInt(time.substring(3, 5)), 0, 0);
|
||||
params['value'] = datetime.getTime()/1000;
|
||||
break;
|
||||
default:
|
||||
$.extend(1, $(obj).serializeArray(), params);
|
||||
break;
|
||||
}
|
||||
self = this;
|
||||
$.post(OC.filePath('journal', 'ajax', 'saveproperty.php'), params, function(jsondata) {
|
||||
if(jsondata.status == 'success') {
|
||||
if(self.id == 'new') {
|
||||
self.loadEntry(jsondata.data.id, jsondata.data);
|
||||
} else {
|
||||
$('#leftcontent li[data-id="'+self.id+'"]').remove();
|
||||
}
|
||||
var item = self.createEntry(jsondata.data);
|
||||
$('#leftcontent').append(item);
|
||||
OC.Journal.Journals.doSort();
|
||||
OC.Journal.Journals.scrollTo(self.id);
|
||||
// add error checking
|
||||
console.log('successful save');
|
||||
} else {
|
||||
OC.dialogs.alert(jsondata.data.message.text, t('contacts', 'Error'));
|
||||
}
|
||||
});
|
||||
},
|
||||
doExport:function() {
|
||||
document.location.href = OC.linkTo('calendar', 'export.php') + '?eventid=' + this.id;
|
||||
},
|
||||
doDelete:function() {
|
||||
// TODO: Do something when there are no more entries.
|
||||
if(this.id == 'new') { return; }
|
||||
$('#delete').tipsy('hide');
|
||||
self = this;
|
||||
OC.dialogs.confirm(t('contacts', 'Are you sure you want to delete this entry?'), t('journal', 'Warning'), function(answer) {
|
||||
if(answer == true) {
|
||||
$.post(OC.filePath('journal', 'ajax', 'delete.php'), {'id': self.id}, function(jsondata) {
|
||||
if(jsondata.status == 'success') {
|
||||
var curlistitem = $('#leftcontent li[data-id="'+self.id+'"]');
|
||||
var newlistitem = curlistitem.prev('li');
|
||||
if(!$(newlistitem).is('li')) {
|
||||
newlistitem = curlistitem.next('li');
|
||||
}
|
||||
if(!$(newlistitem).is('li')) {
|
||||
alert('No more entries. Do something!!!');
|
||||
}
|
||||
$(newlistitem).addClass('active');
|
||||
console.log('newlistitem: ' + newlistitem.toString());
|
||||
curlistitem.remove();
|
||||
var data = newlistitem.data('entry');
|
||||
self.loadEntry(data.id, data);
|
||||
console.log('successful delete');
|
||||
} else {
|
||||
OC.dialogs.alert(jsondata.data.message.text, t('contacts', 'Error'));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
Journals:{
|
||||
sortmethod:undefined,
|
||||
doSort:function(method) {
|
||||
if(method) {
|
||||
this.sortmethod = method;
|
||||
} else {
|
||||
method = this.sortmethod;
|
||||
}
|
||||
// Thanks to http://www.java2s.com/Tutorial/JavaScript/0220__Array/Usinganalphabeticalsortmethodonstrings.html
|
||||
// and http://stackoverflow.com/questions/4258974/sort-list-based-on-data-attribute-using-jquery-metadata-plugin#4259074
|
||||
// and http://stackoverflow.com/questions/8882418/jquery-sorting-lib-that-supports-multilanguage-sorting
|
||||
compareDateTimeAsc = function(a, b){
|
||||
return (parseInt(a.dtstart) > parseInt(b.dtstart)?-1:1);
|
||||
}
|
||||
compareDateTimeDesc = function(a, b){
|
||||
return (parseInt(b.dtstart) < parseInt(a.dtstart)?-1:1);
|
||||
}
|
||||
compareSummaryAsc = function(a, b){
|
||||
return b.summary.toLowerCase().localeCompare(a.summary.toLowerCase());
|
||||
}
|
||||
compareSummaryDesc = function(a, b){
|
||||
return a.summary.toLowerCase().localeCompare(b.summary.toLowerCase());
|
||||
}
|
||||
var func;
|
||||
switch(method) {
|
||||
case 'dtasc':
|
||||
func = compareDateTimeAsc;
|
||||
break;
|
||||
case 'dtdesc':
|
||||
func = compareDateTimeDesc;
|
||||
break;
|
||||
case 'sumasc':
|
||||
func = compareSummaryAsc;
|
||||
break;
|
||||
case 'sumdesc':
|
||||
func = compareSummaryDesc;
|
||||
break;
|
||||
default:
|
||||
var func = compareDateTimeDesc;
|
||||
break;
|
||||
}
|
||||
|
||||
var arr = []
|
||||
// loop through each list item and get the metadata
|
||||
$('#leftcontent li').each(function () {
|
||||
var meta = $(this).data('entry');
|
||||
meta.elem = $(this);
|
||||
arr.push(meta);
|
||||
});
|
||||
arr.sort(func);
|
||||
|
||||
//Foreach item append it to the container. The first i arr will then end up in the top
|
||||
$.each(arr, function(index, item){
|
||||
item.elem.appendTo(item.elem.parent());
|
||||
});
|
||||
},
|
||||
update:function(id) {
|
||||
console.log('update: ' + id);
|
||||
self = this;
|
||||
$('#leftcontent').addClass('loading');
|
||||
$.getJSON(OC.filePath('journal', 'ajax', 'entries.php'), function(jsondata) {
|
||||
if(jsondata.status == 'success') {
|
||||
var entries = $('#leftcontent').empty();
|
||||
$(jsondata.data.entries).each(function(i, entry) {
|
||||
entries.append(OC.Journal.Entry.createEntry(entry));
|
||||
});
|
||||
$('#leftcontent').removeClass('loading');
|
||||
self.doSort('dtasc');
|
||||
console.log('Count: ' + $('#leftcontent li').length);
|
||||
if($('#leftcontent li').length > 0 ){
|
||||
var firstitem;
|
||||
if(id) {
|
||||
firstitem = $('#leftcontent li[data-id="'+id+'"]');
|
||||
} else {
|
||||
firstitem = $('#leftcontent li').first();
|
||||
id = firstitem.data('entry').id;
|
||||
}
|
||||
firstitem.addClass('active');
|
||||
self.scrollTo(id);
|
||||
OC.Journal.Entry.loadEntry(firstitem.data('id'), firstitem.data('entry'));
|
||||
}
|
||||
} else {
|
||||
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
|
||||
}
|
||||
});
|
||||
},
|
||||
scrollTo:function(id){
|
||||
var item = $('#leftcontent li[data-id="'+id+'"]');
|
||||
if(item) {
|
||||
try {
|
||||
$('#leftcontent').animate({scrollTop: $('#leftcontent li[data-id="'+id+'"]').offset().top-70}, 'slow','swing');
|
||||
} catch(e) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$(document).ready(function(){
|
||||
OCCategories.changed = OC.Journal.categoriesChanged;
|
||||
OCCategories.app = 'calendar';
|
||||
|
||||
// Initialize controls.
|
||||
$('#categories').multiple_autocomplete({source: categories});
|
||||
//$('#categories').multiple_autocomplete('option', 'source', categories);
|
||||
$('#dtstartdate').datepicker({dateFormat: 'dd-mm-yy'});
|
||||
$('#dtstarttime').timepicker({timeFormat: 'hh:mm', showPeriodLabels:false});
|
||||
$('#description').rte({classes: ['property','content']});
|
||||
$('.tip').tipsy();
|
||||
|
||||
OC.Journal.init();
|
||||
|
||||
// Show the input with a direcy link the journal entry, binds an event to close
|
||||
// it on blur and removes the binding again afterwards.
|
||||
$('#showlink').on('click', function(event){
|
||||
console.log('showlink');
|
||||
$('#link').toggle('slow').val(totalurl+'&id='+OC.Journal.Entry.id).focus().
|
||||
on('blur',function(event) {$(this).hide()}).off('blur', $(this));
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#rightcontent').on('change', '.property', function(event){
|
||||
OC.Journal.Entry.saveproperty(this);
|
||||
});
|
||||
|
||||
$('#controls').on('click', '#add', function(event){
|
||||
OC.Journal.Entry.add();
|
||||
});
|
||||
|
||||
$('#metadata').on('change', '#also_time', function(event){
|
||||
$('#dtstarttime').toggle().trigger('change');
|
||||
});
|
||||
|
||||
$('#metadata').on('click', '#export', function(event){
|
||||
OC.Journal.Entry.doExport();
|
||||
});
|
||||
|
||||
$('#metadata').on('click', '#editcategories', function(event){
|
||||
OCCategories.edit();
|
||||
});
|
||||
|
||||
$('#metadata').on('click', '#delete', function(event){
|
||||
OC.Journal.Entry.doDelete();
|
||||
});
|
||||
|
||||
$('#controls').on('change', '#entrysort', function(event){
|
||||
OC.Journal.Journals.doSort($(this).val());
|
||||
});
|
||||
|
||||
// Proxy click.
|
||||
$('#leftcontent').on('keydown', '#leftcontent', function(event){
|
||||
if(event.which == 13) {
|
||||
$('#leftcontent').click(event);
|
||||
}
|
||||
});
|
||||
// Journal entry clicked
|
||||
$(document).on('click', '#leftcontent', function(event){
|
||||
var $tgt = $(event.target);
|
||||
var item = $tgt.is('li')?$($tgt):($tgt).parents('li').first();
|
||||
var id = item.data('id');
|
||||
item.addClass('active');
|
||||
var oldid = $('#entry').data('id');
|
||||
console.log('oldid: ' + oldid);
|
||||
if(oldid != 0){
|
||||
$('#leftcontent li[data-id="'+oldid+'"]').removeClass('active');
|
||||
}
|
||||
OC.Journal.Entry.loadEntry(id, item.data('entry'));
|
||||
return false;
|
||||
});
|
||||
// Editor command.
|
||||
$('.rte-toolbar button').on('click', function(event){
|
||||
console.log('cmd: ' + $(this).data('cmd'));
|
||||
$('#description').rte('formatText', $(this).data('cmd'));
|
||||
event.preventDefault();
|
||||
return false;
|
||||
});
|
||||
// Toggle text/html editing mode.
|
||||
$('#togglemode').on('click', function(event){
|
||||
OC.Journal.toggleMode(true);
|
||||
return false;
|
||||
});
|
||||
$('#editable').on('change', function(event){
|
||||
OC.Journal.setEnabled($(this).get(0).checked);
|
||||
});
|
||||
|
||||
});
|
|
@ -1,244 +0,0 @@
|
|||
// http://wiki.jqueryui.com/w/page/12138135/Widget%20factory
|
||||
|
||||
(function( $ ) {
|
||||
|
||||
$.widget( 'ui.rte', {
|
||||
// These options will be used as defaults
|
||||
options: {
|
||||
disabled: true,
|
||||
mode: 'html'
|
||||
},
|
||||
// Set up the widget
|
||||
_create: function() {
|
||||
console.log('_create');
|
||||
var self = this,
|
||||
dirty = false,
|
||||
textarea = this.element; //.hide(),
|
||||
pos = textarea.position();
|
||||
//this.element.text = this.text;
|
||||
this.mirror = $('<div class="rte-content" contenteditable="true" style="top:'+pos.top+';left:'+pos.left+';" ></div>').insertAfter(textarea).show();
|
||||
textarea.hide();
|
||||
this.formatText('styleWithCSS', true);
|
||||
this.validtags = ['A','P','STRONG', 'B', 'I', 'SPAN', 'DIV', 'OL', 'UL', 'LI', 'DL', 'DT', 'DD'];
|
||||
this.enabled = true;
|
||||
|
||||
/*$(window).resize(function() {
|
||||
console.log('resize: ');
|
||||
});*/
|
||||
|
||||
this.mirror.keydown(function(event){
|
||||
if(event.which == 13) {
|
||||
self.insertAtCaret('<br />');
|
||||
}
|
||||
});
|
||||
this.mirror.keyup(function() {
|
||||
console.log('keyup, set dirty.');
|
||||
self.dirty = true;
|
||||
});
|
||||
this.mirror.blur(function() {
|
||||
console.log('blur: ');
|
||||
if(self.dirty) {
|
||||
self.mirror.trigger('change');
|
||||
self.dirty = false;
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
_init: function() {
|
||||
console.log('_init');
|
||||
self = this;
|
||||
$.each(this.options, function(key, value) {
|
||||
self._setOption(key, value);
|
||||
});
|
||||
},
|
||||
text: function(str) {
|
||||
console.log('function text');
|
||||
if(str != undefined) {
|
||||
this.mirror.html(str);
|
||||
this.element.text(str);
|
||||
} else {
|
||||
console.log('returning: ' + this.element.val());
|
||||
return this.element.val();
|
||||
}
|
||||
},
|
||||
html: function(str) {
|
||||
console.log('function html');
|
||||
if(str != undefined) {
|
||||
console.log('str: ' + str);
|
||||
var $str;
|
||||
try {
|
||||
$str = $(str);
|
||||
this.mirror.empty().html($str); // Call empty() for IE 8.
|
||||
this.element.text($str.text());
|
||||
} catch(e) {
|
||||
console.log(e.message);
|
||||
this.mirror.empty().html(str);
|
||||
this.element.text(str);
|
||||
}
|
||||
//console.log('length: ' + $str.length);
|
||||
//this.mirror.get(0).contenteditable=false;
|
||||
} else {
|
||||
console.log('returning: ' + this.mirror.html());
|
||||
return this.mirror.html();
|
||||
}
|
||||
},
|
||||
insertAtCaret: function(myValue){
|
||||
// Found this at stackoverflow
|
||||
return this.mirror.each(function(i) {
|
||||
if (document.selection) {
|
||||
console.log('IE');
|
||||
//For browsers like Internet Explorer
|
||||
this.focus();
|
||||
sel = document.selection.createRange();
|
||||
sel.text = myValue;
|
||||
this.focus();
|
||||
}
|
||||
else if (this.selectionStart || this.selectionStart == '0') {
|
||||
console.log('FF');
|
||||
//For browsers like Firefox and Webkit based
|
||||
var startPos = this.selectionStart;
|
||||
var endPos = this.selectionEnd;
|
||||
var scrollTop = this.scrollTop;
|
||||
this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
|
||||
this.focus();
|
||||
this.selectionStart = startPos + myValue.length;
|
||||
this.selectionEnd = startPos + myValue.length;
|
||||
this.scrollTop = scrollTop;
|
||||
} else {
|
||||
console.log('Smth.');
|
||||
this.value += myValue;
|
||||
this.focus();
|
||||
}
|
||||
})
|
||||
},
|
||||
showSelection: function() {
|
||||
var textComponent = this.mirror.get(0); //document.getElementById('Editor');
|
||||
var selectedText;
|
||||
// IE version
|
||||
if (document.selection != undefined) {
|
||||
textComponent.focus();
|
||||
var sel = document.selection.createRange();
|
||||
selectedText = sel.text;
|
||||
}
|
||||
// Mozilla version
|
||||
else if (textComponent.selectionStart != undefined) {
|
||||
var startPos = textComponent.selectionStart;
|
||||
var endPos = textComponent.selectionEnd;
|
||||
selectedText = textComponent.value.substring(startPos, endPos)
|
||||
}
|
||||
alert("You selected: " + selectedText);
|
||||
},
|
||||
formatText: function(command, option) {
|
||||
self = this, useDialog = false;
|
||||
switch(command) {
|
||||
case 'ulist':
|
||||
command = 'insertUnorderedList';
|
||||
break;
|
||||
case 'olist':
|
||||
command = 'insertOrderedList';
|
||||
break;
|
||||
case 'createlink':
|
||||
self.showSelection();
|
||||
option=prompt('Write the URL here')
|
||||
useDialog = true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
try{
|
||||
document.execCommand(command, useDialog, option);
|
||||
self.dirty = true; // FIXME: This doesn't work because blur is triggered before dirty is set.
|
||||
self.mirror.trigger('blur'); // Dirty hack to trigger save. Hmm, if it only worked...
|
||||
}catch(e){
|
||||
console.log('Error: ' + e)
|
||||
}
|
||||
},
|
||||
setEnabled: function(state) {
|
||||
console.log('function setEnabled: ' + state);
|
||||
if(state != undefined) {
|
||||
this._setOption('disabled', !state);
|
||||
}
|
||||
return this.options['disabled'];
|
||||
},
|
||||
mode: function(mode) {
|
||||
if(mode != undefined) {
|
||||
this._setOption('mode', mode);
|
||||
}
|
||||
return this.options['mode'];
|
||||
},
|
||||
/*toggle: function() {
|
||||
this._setOption('disabled', !this.options['disabled']);
|
||||
return !this.options['disabled'];
|
||||
},*/
|
||||
toggleMode: function() {
|
||||
this._setOption('mode', (this.options['mode'] == 'html'?'text':'html'));
|
||||
return this.options['mode'];
|
||||
},
|
||||
// Use the _setOption method to respond to changes to options
|
||||
_setOption: function( key, value ) {
|
||||
console.log('option ' + key + ': ' + value);
|
||||
switch( key ) {
|
||||
case 'disabled':
|
||||
if(value) {
|
||||
this.mirror.get(0).contenteditable = false;
|
||||
this.mirror.attr('contenteditable', false);
|
||||
this.mirror.removeClass('editable');
|
||||
this.element.attr('disabled', true);
|
||||
this.element.removeClass('editable');
|
||||
} else {
|
||||
this.mirror.get(0).contenteditable = true;
|
||||
this.mirror.attr('contenteditable', true);
|
||||
this.mirror.addClass('editable');
|
||||
this.element.attr('disabled', false);
|
||||
this.element.addClass('editable');
|
||||
}
|
||||
break;
|
||||
case 'mode':
|
||||
switch(value) {
|
||||
case 'html':
|
||||
this.mirror.show();
|
||||
this.element.hide();
|
||||
break;
|
||||
case 'text':
|
||||
this.mirror.hide();
|
||||
this.element.show();
|
||||
this.element.trigger('resize');
|
||||
break;
|
||||
default:
|
||||
throw { name: 'UnknownMode', message: 'Invalid mode: ' + value }
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'classes':
|
||||
if($.isArray(value)) {
|
||||
var mirror = this.mirror;
|
||||
$.each(this.options['classes'], function(key, value) {
|
||||
mirror.addClass(value);
|
||||
});
|
||||
} else {
|
||||
this.mirror.addClass(value);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
this.options[key] = value;
|
||||
break;
|
||||
}
|
||||
// In jQuery UI 1.8, you have to manually invoke the _setOption method from the base widget
|
||||
|
||||
$.Widget.prototype._setOption.apply( this, arguments );
|
||||
// In jQuery UI 1.9 and above, you use the _super method instead
|
||||
//this._super( "_setOption", key, value );
|
||||
},
|
||||
// Use the destroy method to clean up any modifications your widget has made to the DOM
|
||||
destroy: function() {
|
||||
this.mirror.remove();
|
||||
this.element.show();
|
||||
// In jQuery UI 1.8, you must invoke the destroy method from the base widget
|
||||
$.Widget.prototype.destroy.call( this );
|
||||
// In jQuery UI 1.9 and above, you would define _destroy instead of destroy and not call the base method
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}( jQuery ) );
|
||||
|
||||
|
|
@ -1,76 +0,0 @@
|
|||
/*!
|
||||
* jQuery TextChange Plugin
|
||||
* http://www.zurb.com/playground/jquery-text-change-custom-event
|
||||
*
|
||||
* Copyright 2010, ZURB
|
||||
* Released under the MIT License
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
$.event.special.textchange = {
|
||||
|
||||
setup: function (data, namespaces) {
|
||||
$(this).data('lastValue', this.contentEditable === 'true' ? $(this).html() : $(this).val());
|
||||
$(this).bind('keyup.textchange', $.event.special.textchange.handler);
|
||||
$(this).bind('cut.textchange paste.textchange input.textchange', $.event.special.textchange.delayedHandler);
|
||||
},
|
||||
|
||||
teardown: function (namespaces) {
|
||||
$(this).unbind('.textchange');
|
||||
},
|
||||
|
||||
handler: function (event) {
|
||||
$.event.special.textchange.triggerIfChanged($(this));
|
||||
},
|
||||
|
||||
delayedHandler: function (event) {
|
||||
var element = $(this);
|
||||
setTimeout(function () {
|
||||
$.event.special.textchange.triggerIfChanged(element);
|
||||
}, 25);
|
||||
},
|
||||
|
||||
triggerIfChanged: function (element) {
|
||||
var current = element[0].contentEditable === 'true' ? element.html() : element.val();
|
||||
if (current !== element.data('lastValue')) {
|
||||
element.trigger('textchange', [element.data('lastValue')]);
|
||||
element.data('lastValue', current);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$.event.special.hastext = {
|
||||
|
||||
setup: function (data, namespaces) {
|
||||
$(this).bind('textchange', $.event.special.hastext.handler);
|
||||
},
|
||||
|
||||
teardown: function (namespaces) {
|
||||
$(this).unbind('textchange', $.event.special.hastext.handler);
|
||||
},
|
||||
|
||||
handler: function (event, lastValue) {
|
||||
if ((lastValue === '') && lastValue !== $(this).val()) {
|
||||
$(this).trigger('hastext');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$.event.special.notext = {
|
||||
|
||||
setup: function (data, namespaces) {
|
||||
$(this).bind('textchange', $.event.special.notext.handler);
|
||||
},
|
||||
|
||||
teardown: function (namespaces) {
|
||||
$(this).unbind('textchange', $.event.special.notext.handler);
|
||||
},
|
||||
|
||||
handler: function (event, lastValue) {
|
||||
if ($(this).val() === '' && $(this).val() !== lastValue) {
|
||||
$(this).trigger('notext');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery);
|
|
@ -1,15 +0,0 @@
|
|||
$(document).ready(function(){
|
||||
$('#journal_calendar').on('change', function(event){
|
||||
$.post(OC.filePath('journal', 'ajax', 'setdefaultcalendar.php'), {'id':$('#journal_calendar option:selected').val()}, function(jsondata) {
|
||||
var success = {padding: 0.5em, background-color:green, color: white, font-weight: bold, float: left};
|
||||
var failure = {padding: 0.5em, background-color:red, color: white, font-weight: bold, float: left};
|
||||
if(jsondata.status == 'success') {
|
||||
$('#journal_status');
|
||||
$('#journal_status').css(success).html(t('journal', 'Saved')).fadeIn().fadeOut(5000);
|
||||
} else {
|
||||
$('#journal_status').css(failure);
|
||||
$('#journal_status').html(t('journal', 'Error saving: ')+jsondata.data.message).fadeIn().fadeOut(5000);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
|
@ -1,135 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - Journal
|
||||
*
|
||||
* @author Bart Visscher
|
||||
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
|
||||
* @copyright 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class manages our journal.
|
||||
*/
|
||||
OC_Journal_App::$l10n = new OC_L10N('journal');
|
||||
class OC_Journal_App {
|
||||
public static $l10n;
|
||||
/*
|
||||
* @brief categories of the user
|
||||
*/
|
||||
protected static $categories = null;
|
||||
|
||||
public static function arrayForJSON($id, $vjournal, $user_timezone) {
|
||||
// Possible properties: URL
|
||||
$journal = array( 'id' => $id );
|
||||
$journal['summary'] = $vjournal->getAsString('SUMMARY');
|
||||
$format = 'text';
|
||||
if($vjournal->DESCRIPTION) {
|
||||
foreach($vjournal->DESCRIPTION->parameters as $parameter){
|
||||
if(stripos($parameter->name, 'FORMAT') !== false && stripos($parameter->value, 'HTML') !== false){
|
||||
$format = 'html'; // an educated guess ;-)
|
||||
break;
|
||||
}
|
||||
}
|
||||
$desc = $vjournal->getAsString('DESCRIPTION');
|
||||
$journal['description'] = array(
|
||||
'value' => ($format=='html'?$body = preg_replace("/.*<body[^>]*>|<\/body>.*/si", "", $desc):$desc),
|
||||
'format' => $format,
|
||||
'parameters' => self::parametersForProperty($vjournal->DESCRIPTION)
|
||||
);
|
||||
} else {
|
||||
$journal['description'] = array('value' => '', 'format' => 'text');
|
||||
}
|
||||
$journal['organizer'] = array(
|
||||
'value' => $vjournal->getAsString('ORGANIZER'),
|
||||
'parameters' => self::parametersForProperty($vjournal->ORGANIZER)
|
||||
);
|
||||
$journal['categories'] = $vjournal->getAsArray('CATEGORIES');
|
||||
//error_log('DTSTART: '.print_r($vjournal->DTSTART, true));
|
||||
$dtprop = $vjournal->DTSTART;
|
||||
if($dtprop) {
|
||||
$dtstart = $vjournal->DTSTART->getDateTime();
|
||||
if($dtstart) {
|
||||
//if(!)
|
||||
$tz = new DateTimeZone($user_timezone);
|
||||
if($tz->getName() != $dtstart->getTimezone()->getName() && !$vjournal->DTSTART->offsetExists('TZID')) {
|
||||
//error_log($tz->getName().' != '.$dtstart->getTimezone()->getName());
|
||||
//error_log('TZ offset: '.$tz->getOffset(new DateTime("now"))/60);
|
||||
$dtstart->setTimezone($tz);
|
||||
}
|
||||
$journal['dtstart'] = $dtstart->format('U');
|
||||
$journal['only_date'] = ($dtprop->getDateType() == Sabre_VObject_Property_DateTime::DATE);
|
||||
} else {
|
||||
OCP\Util::writeLog('journal', 'Could not get DTSTART DateTime for '.$journal['summary'], OCP\Util::ERROR);
|
||||
}
|
||||
} else {
|
||||
OCP\Util::writeLog('journal', 'Could not get DTSTART for '.$journal['summary'], OCP\Util::ERROR);
|
||||
}
|
||||
return $journal;
|
||||
}
|
||||
|
||||
/** Get a map of a properties parameters for JSON
|
||||
* @param $property Sabre_VObject_Property
|
||||
* @return array of parameters in { name => value, } format
|
||||
*/
|
||||
public static function parametersForProperty($property) {
|
||||
$temp = array();
|
||||
if(!$property) {
|
||||
return;
|
||||
}
|
||||
foreach($property->parameters as $parameter){
|
||||
$temp[$parameter->name] = $parameter->value;
|
||||
}
|
||||
return $temp;
|
||||
}
|
||||
|
||||
/*
|
||||
* @brief returns the vcategories object of the user
|
||||
* @return (object) $vcategories
|
||||
*/
|
||||
protected static function getVCategories() {
|
||||
if (is_null(self::$categories)) {
|
||||
self::$categories = new OC_VCategories('calendar');
|
||||
}
|
||||
return self::$categories;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a stub for a new journal entry.
|
||||
* @return OC_VObject The newly created stub.
|
||||
*/
|
||||
public static function createVCalendar() {
|
||||
$vcalendar = new OC_VObject('VCALENDAR');
|
||||
$appinfo = OCP\App::getAppInfo('journal');
|
||||
$appversion = OCP\App::getAppVersion('journal');
|
||||
$prodid = '-//ownCloud//NONSGML '.$appinfo['name'].' '.$appversion.'//EN';
|
||||
$vcalendar->add('PRODID', $prodid);
|
||||
$vcalendar->add('VERSION', '2.0');
|
||||
|
||||
$vjournal = new OC_VObject('VJOURNAL');
|
||||
$vjournal->setDateTime('DTSTART', 'now', Sabre_VObject_Property_DateTime::LOCALTZ);
|
||||
$vjournal->setDateTime('CREATED', 'now', Sabre_VObject_Property_DateTime::UTC);
|
||||
$vjournal->setUID();
|
||||
$email = OCP\Config::getUserValue(OCP\User::getUser(), 'settings', 'email', '');
|
||||
if($email) {
|
||||
$vjournal->setString('ORGANIZER', 'mailto:'.$email);
|
||||
}
|
||||
$vcalendar->add($vjournal);
|
||||
return $vcalendar;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - Journal
|
||||
*
|
||||
* @copyright 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class manages our journal.
|
||||
*/
|
||||
class OC_Journal_Hooks {
|
||||
/**
|
||||
* Hook to convert a completed Task (VTODO) to a journal entry and add it to the calendar.
|
||||
* @param $vtodo An OC_VObject of type VTODO.
|
||||
*/
|
||||
public static function taskToJournalEntry($vtodo) {
|
||||
if(!$vtodo) { return; }
|
||||
|
||||
OCP\Util::writeLog('journal', 'Completed task: '.$vtodo->getAsString('SUMMARY'), OCP\Util::DEBUG);
|
||||
$vcalendar = OC_Journal_App::createVCalendar();
|
||||
$vjournal = $vcalendar->VJOURNAL;
|
||||
$vjournal->setDateTime('DTSTART',$vtodo->COMPLETED->getDateTime());
|
||||
$vjournal->SUMMARY = $vtodo->SUMMARY;
|
||||
$vjournal->setString('SUMMARY', OC_Journal_App::$l10n->t('Completed task: ').$vjournal->getAsString('SUMMARY'));
|
||||
$vjournal->DESCRIPTION = $vtodo->DESCRIPTION;
|
||||
|
||||
$cid = OCP\Config::getUserValue(OCP\User::getUser(), 'journal', 'default_calendar', null);
|
||||
if(!$cid) {
|
||||
$calendars = OC_Calendar_Calendar::allCalendars(OCP\User::getUser(), true);
|
||||
$first_calendar = reset($calendars);
|
||||
$cid = $first_calendar['id'];
|
||||
}
|
||||
try {
|
||||
$id = OC_Calendar_Object::add($cid, $vcalendar->serialize());
|
||||
} catch (Exception $e) {
|
||||
OCP\Util::writeLog('journal', 'Error adding completed Task to calendar: "'.$cid.'" '. $e->getMessage(), OCP\Util::ERROR);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
<?php
|
||||
class OC_Search_Provider_Journal extends OC_Search_Provider {
|
||||
function search($query){
|
||||
$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), true);
|
||||
if(count($calendars)==0 || !OCP\App::isEnabled('calendar')) {
|
||||
//return false;
|
||||
}
|
||||
$results=array();
|
||||
$searchquery=array();
|
||||
if(substr_count($query, ' ') > 0) {
|
||||
$searchquery = explode(' ', $query);
|
||||
}else{
|
||||
$searchquery[] = $query;
|
||||
}
|
||||
error_log('search');
|
||||
$user_timezone = OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timezone', date_default_timezone_get());
|
||||
$l = new OC_l10n('journal');
|
||||
foreach($calendars as $calendar) {
|
||||
$objects = OC_Calendar_Object::all($calendar['id']);
|
||||
foreach($objects as $object) {
|
||||
if($object['objecttype']!='VJOURNAL') {
|
||||
continue;
|
||||
}
|
||||
if(substr_count(strtolower($object['summary']), strtolower($query)) > 0) {
|
||||
$calendardata = OC_VObject::parse($object['calendardata']);
|
||||
$vjournal = $calendardata->VJOURNAL;
|
||||
$dtstart = $vjournal->DTSTART;
|
||||
if($dtstart) {
|
||||
continue;
|
||||
}
|
||||
$start_dt = $dtstart->getDateTime();
|
||||
$start_dt->setTimezone(new DateTimeZone($user_timezone));
|
||||
if ($dtstart->getDateType() == Sabre_VObject_Property_DateTime::DATE) {
|
||||
$info = $l->t('Date') . ': ' . $start_dt->format('d.m.Y');
|
||||
}else{
|
||||
$info = $l->t('Date') . ': ' . $start_dt->format('d.m.y H:i');
|
||||
}
|
||||
$link = OCP\Util::linkTo('journal', 'index.php').'&id='.urlencode($object['id']);
|
||||
$results[]=new OC_Search_Result($object['summary'],$info, $link,(string)$l->t('Journal'));//$name,$text,$link,$type
|
||||
}
|
||||
}
|
||||
}
|
||||
return $results;
|
||||
}
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - Journal
|
||||
*
|
||||
* @author Thomas Tanghus
|
||||
* @copyright 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class manages our journals
|
||||
*/
|
||||
class OC_Task_VJournal extends OC_Calendar_Object{
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Thomas Tanghus <thomas@tanghus.net>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
|
||||
OCP\JSON::checkLoggedIn();
|
||||
|
||||
$errors = array();
|
||||
|
||||
$required_apps = array(
|
||||
array('id' => 'tal', 'name' => 'TAL Page Templates'),
|
||||
array('id' => 'journal', 'name' => 'Journal'),
|
||||
array('id' => 'contacts', 'name' => 'Contacts'),
|
||||
);
|
||||
foreach($required_apps as $app) {
|
||||
if(!OCP\App::isEnabled($app['id'])) {
|
||||
$error = (string)$l->t('The %%s app isn\'t enabled! Please enable it here: <strong><a href="%%s?appid=%%s">Enable %%s app</a></strong>');
|
||||
$errors[] = sprintf($error, $app['name'],OCP\Util::linkTo('settings', 'apps'), $app['id'], $app['name']);
|
||||
}
|
||||
}
|
||||
|
||||
$calendars = OC_Calendar_Calendar::allCalendars(OCP\User::getUser(), true);
|
||||
if( count($calendars) == 0 ) {
|
||||
$error = (string)$l->t('You have no calendars. Please add one at the <strong><a href="%%s">Calendar app</a></strong>');
|
||||
$errors[] = sprintf($error, OCP\Util::linkTo('calendar', 'index.php'));
|
||||
}
|
||||
|
||||
if(count($errors) > 0) {
|
||||
$tmpl = new OCP\Template('journal', 'rtfm');
|
||||
$tmpl->assign('errors',$errors, false);
|
||||
} else {
|
||||
$cid = OCP\Config::getUserValue(OCP\User::getUser(), 'journal', 'default_calendar', null);
|
||||
OCP\Util::addScript('journal', 'settings');
|
||||
$tmpl = new OC_TALTemplate('journal', 'settings', 'user');
|
||||
$tmpl->assign('calendars', $calendars);
|
||||
$tmpl->assign('cid', $cid);
|
||||
}
|
||||
|
||||
return $tmpl->fetchPage();
|
||||
|
||||
?>
|
|
@ -1,101 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html metal:use-macro="${maintemplate}/page">
|
||||
<head>
|
||||
<title>Journal</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content" metal:fill-slot="content">
|
||||
<form onsubmit="return false;">
|
||||
<div id="controls">
|
||||
<select class="tip" id="entrysort" title="Sort journal entries" i18n:attributes="title">
|
||||
<option value="dtdesc">Date - descending</option>
|
||||
<option value="dtasc">Date - ascending</option>
|
||||
<option value="sumdesc">Summary - descending</option>
|
||||
<option value="sumasc">Summary - ascending</option>
|
||||
</select>
|
||||
<button class="tip" id="add" title="Add new journal entry" i18n:attributes="title" i18n:translate="">Add</button>
|
||||
</div>
|
||||
<ul id="leftcontent"></ul>
|
||||
<div id="rightcontent">
|
||||
<div id="entry">
|
||||
<input class="property propertycontainer content" id="summary" name="value" type="text" size="80" placeholder="First enter a short summary" value="" required="required" data-type="SUMMARY" i18n:attributes="placeholder" />
|
||||
<ul id="editortoolbar" class="rte-toolbar svg">
|
||||
<li class="richtext">
|
||||
<button class="tip" data-cmd="bold" title="Bold" i18n:attributes="title">
|
||||
<img tal:attributes="src image:string:journal/bold.svg" />
|
||||
</button>
|
||||
</li>
|
||||
<li class="richtext">
|
||||
<button class="tip" data-cmd="italic" title="Italic" i18n:attributes="title">
|
||||
<img tal:attributes="src image:string:journal/italic.svg" />
|
||||
</button>
|
||||
</li>
|
||||
<li class="richtext">
|
||||
<button class="tip" data-cmd="strikethrough" title="Strike-through" i18n:attributes="title">
|
||||
<img tal:attributes="src image:string:journal/strikethrough.svg" />
|
||||
</button>
|
||||
</li>
|
||||
<li class="richtext">
|
||||
<button class="tip" data-cmd="underline" title="Underline" i18n:attributes="title">
|
||||
<img tal:attributes="src image:string:journal/underline.svg" />
|
||||
</button>
|
||||
</li>
|
||||
<li class="richtext">
|
||||
<button class="tip" data-cmd="ulist" title="Unordered list" i18n:attributes="title">
|
||||
<img tal:attributes="src image:string:journal/list.svg" />
|
||||
</button>
|
||||
</li>
|
||||
<li class="richtext">
|
||||
<button class="tip" data-cmd="createlink" title="Link (URL)" i18n:attributes="title">
|
||||
<img tal:attributes="src image:string:core/actions/public.svg" />
|
||||
</button>
|
||||
</li>
|
||||
<li><a id="togglemode" class="hidden" i18n:translate="">Switch edit mode</a></li>
|
||||
</ul>
|
||||
<div class="propertycontainer" data-type="DESCRIPTION"><textarea class="property content" id="description" name="value"></textarea></div>
|
||||
</div>
|
||||
<dl id="metadata">
|
||||
<div>
|
||||
<input type="checkbox" id="editable" /><label class="tip" for="editable" title="Set this journal entry in edit mode" i18n:attributes="title" i18n:translate="">Edit</label>
|
||||
<a class="tip" id="export" title="Export as iCal file" i18n:attributes="title">
|
||||
<img class="svg action" tal:attributes="src image:string:core/actions/download.svg" />
|
||||
</a>
|
||||
<a class="tip" id="showlink" title="Direct link to this journal entry" i18n:attributes="title">
|
||||
<img class="svg action" tal:attributes="src image:string:core/actions/public.svg" />
|
||||
</a>
|
||||
<a class="tip" id="delete" title="Delete this journal entry" i18n:attributes="title">
|
||||
<img class="svg action" tal:attributes="src image:string:core/actions/delete.svg" />
|
||||
</a>
|
||||
<input class="hidden" id="link" type="text" />
|
||||
</div>
|
||||
<dt><label for="organizer" i18n:translate="">Author</label></dt>
|
||||
<dd>
|
||||
<input class="property propertycontainer" id="organizer" name="value" type="text" size="16" placeholder="Who has written this" value="" data-type="ORGANIZER" disabled="true" i18n:attributes="placeholder" />
|
||||
</dd>
|
||||
<dt id="categories_label"><label for="categories" i18n:translate="">Categories</label></dt>
|
||||
<dd class="propertycontainer" id="categories_value" data-type="CATEGORIES">
|
||||
<input class="property" id="categories" name="value" type="text" size="16" placeholder="Separate with commas" value="" disabled="true" i18n:attributes="placeholder" />
|
||||
<a role="button" class="tip action" id="editcategories" title="Edit groups" i18n:attributes="title">
|
||||
<img class="svg action" tal:attributes="src image:string:core/actions/rename.svg" />
|
||||
</a>
|
||||
</dd>
|
||||
<dt>
|
||||
<label for="dtstartdate" i18n:translate="">Date</label>
|
||||
<input type="checkbox" id="also_time" />
|
||||
<label class="tip" for="also_time" title="Select if this entry also has a time associated." i18n:attributes="title" i18n:translate="">Include time</label>
|
||||
</dt>
|
||||
<dd class="propertycontainer" data-type="DTSTART">
|
||||
<input class="property" id="dtstartdate" name="value" type="date" size="10" placeholder="dd-mm-yyyy" value="" i18n:attributes="placeholder" disabled="true" />
|
||||
<input class="property" id="dtstarttime" name="value" type="time" size="5" placeholder="hh-mm" value="" i18n:attributes="placeholder" disabled="true" />
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var categories = ${structure php:json_encode(categories)};
|
||||
var id = '${id}';
|
||||
var totalurl = '${url:string:journal/index.php}';
|
||||
</script>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,7 +0,0 @@
|
|||
<ul style="margin: 2em; font-size: 1.4em; line-spacing: 2em;">
|
||||
<?php
|
||||
foreach($_['errors'] as $error) { ?>
|
||||
<li><?php echo $error; ?></li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
<form id="journal">
|
||||
<fieldset class="personalblock">
|
||||
<legend i18n:translate="">Journal</legend>
|
||||
<dl>
|
||||
<dt i18n:translate="">Select default calendar<br />for storing journals</dt>
|
||||
<dd>
|
||||
<select id="journal_calendar" style="float:left;">
|
||||
<tal:block repeat="calendar calendars">
|
||||
<option tal:define="id calendar/id" tal:attributes="value id; selected php:(cid == id ? 'selected' : null )" tal:content="calendar/displayname"></option>
|
||||
</tal:block>
|
||||
</select>
|
||||
</dd><span id="journal_status"></span>
|
||||
</dl>
|
||||
</fieldset>
|
||||
</form>
|
|
@ -1,5 +0,0 @@
|
|||
3rdparty/*
|
||||
news.kdev4
|
||||
*~
|
||||
.kdev4
|
||||
img/*
|
|
@ -1,37 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('news');
|
||||
OCP\JSON::callCheck();
|
||||
|
||||
$userid = OCP\USER::getUser();
|
||||
|
||||
$feedurl = trim($_POST['feedurl']);
|
||||
$folderid = trim($_POST['folderid']);
|
||||
|
||||
$feed = OC_News_Utils::fetch($feedurl);
|
||||
$feedmapper = new OC_News_FeedMapper();
|
||||
$feedid = $feedmapper->save($feed, $folderid);
|
||||
|
||||
$l = OC_L10N::get('news');
|
||||
|
||||
if(!$feedid) {
|
||||
OCP\JSON::error(array('data' => array('message' => $l->t('Error adding folder.'))));
|
||||
OCP\Util::writeLog('news','ajax/createfeed.php: Error adding feed: '.$_POST['feedurl'], OCP\Util::ERROR);
|
||||
exit();
|
||||
}
|
||||
|
||||
//TODO: replace the following with a real success case. see contact/ajax/createaddressbook.php for inspirations
|
||||
OCP\JSON::success(array('data' => array('message' => $l->t('Feed added!'))));
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('news');
|
||||
OCP\JSON::callCheck();
|
||||
|
||||
$userid = OCP\USER::getUser();
|
||||
|
||||
$name = trim($_POST['name']);
|
||||
$parentid = trim($_POST['parentid']);
|
||||
|
||||
$foldermapper = new OC_News_FolderMapper($userid);
|
||||
|
||||
if($parentid != 0)
|
||||
$folder = new OC_News_Folder($name, NULL, $foldermapper->find($parentid));
|
||||
else
|
||||
$folder = new OC_News_Folder($name);
|
||||
|
||||
$folderid = $foldermapper->save($folder);
|
||||
|
||||
$l = OC_L10N::get('news');
|
||||
|
||||
if(!$folderid) {
|
||||
OCP\JSON::error(array('data' => array('message' => $l->t('Error adding folder.'))));
|
||||
OCP\Util::writeLog('news','ajax/createfolder.php: Error adding folder: '.$_POST['name'], OCP\Util::ERROR);
|
||||
}
|
||||
else {
|
||||
//TODO: replace the following with a real success case. see contact/ajax/createaddressbook.php for inspirations
|
||||
OCP\JSON::success(array('data' => array('message' => $l->t('Folder added!'))));
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('news');
|
||||
OCP\JSON::callCheck();
|
||||
|
||||
$userid = OCP\USER::getUser();
|
||||
|
||||
$feedid = $_POST['feedid'];
|
||||
|
||||
$feedmapper = new OC_News_FeedMapper();
|
||||
$success = $feedmapper->deleteById($feedid);
|
||||
|
||||
$l = OC_L10N::get('news');
|
||||
|
||||
if(!$success) {
|
||||
OCP\JSON::error(array('data' => array('message' => $l->t('Error removing feed.'))));
|
||||
OCP\Util::writeLog('news','ajax/deletefeed.php: Error removing feed: '.$_POST['feedid'], OCP\Util::ERROR);
|
||||
exit();
|
||||
}
|
||||
|
||||
OCP\JSON::success(array('data' => array( 'feedid' => $feedid )));
|
|
@ -1,33 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('news');
|
||||
OCP\JSON::callCheck();
|
||||
|
||||
$userid = OCP\USER::getUser();
|
||||
|
||||
$folderid = trim($_POST['folderid']);
|
||||
|
||||
$foldermapper = new OC_News_FolderMapper();
|
||||
$success = $foldermapper->deleteById($folderid);
|
||||
|
||||
$l = OC_L10N::get('news');
|
||||
|
||||
if(!$success) {
|
||||
OCP\JSON::error(array('data' => array('message' => $l->t('Error removing folder.'))));
|
||||
OCP\Util::writeLog('news','ajax/deletefolder.php: Error removing folder: '.$_POST['folderid'], OCP\Util::ERROR);
|
||||
exit();
|
||||
}
|
||||
|
||||
OCP\JSON::success(array('data' => array( 'folderid' => $folderid )));
|
|
@ -1,7 +0,0 @@
|
|||
<?php
|
||||
|
||||
include("populateroot.php");
|
||||
|
||||
$output = new OCP\Template("news", "part.addfeed");
|
||||
$output -> assign('allfeeds', $allfeeds);
|
||||
$output -> printpage();
|
|
@ -1,7 +0,0 @@
|
|||
<?php
|
||||
|
||||
include("populateroot.php");
|
||||
|
||||
$output = new OCP\Template("news", "part.addfolder");
|
||||
$output -> assign('allfeeds', $allfeeds);
|
||||
$output -> printpage();
|
|
@ -1,35 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('news');
|
||||
OCP\JSON::callCheck();
|
||||
|
||||
$itemid = $_POST['itemid'];
|
||||
|
||||
$itemmapper = new OC_News_ItemMapper();
|
||||
$item = $itemmapper->find($itemid);
|
||||
$item->setRead();
|
||||
$success = $itemmapper->update($item);
|
||||
|
||||
$l = OC_L10N::get('news');
|
||||
|
||||
if(!$success) {
|
||||
OCP\JSON::error(array('data' => array('message' => $l->t('Error marking item as read.'))));
|
||||
OCP\Util::writeLog('news','ajax/markitem.php: Error marking item as read: '.$_POST['itemid'], OCP\Util::ERROR);
|
||||
exit();
|
||||
}
|
||||
|
||||
//TODO: replace the following with a real success case. see contact/ajax/createaddressbook.php for inspirations
|
||||
OCP\JSON::success(array('data' => array('itemid' => $itemid )));
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
<?php
|
||||
|
||||
OCP\JSON::checkLoggedIn();
|
||||
OCP\JSON::checkAppEnabled('news');
|
||||
|
||||
$foldermapper = new OC_News_FolderMapper(OCP\USER::getUser());
|
||||
|
||||
$allfeeds = $foldermapper->populate('Everything', 0);
|
||||
|
||||
if ($allfeeds) {
|
||||
$feedid = isset( $_GET['feedid'] ) ? $_GET['feedid'] : null;
|
||||
if ($feedid == null) {
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
$feedid = 0;
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
OC::$CLASSPATH['OC_News_Item'] = 'apps/news/lib/item.php';
|
||||
OC::$CLASSPATH['OC_News_Collection'] = 'apps/news/lib/collection.php';
|
||||
OC::$CLASSPATH['OC_News_Feed'] = 'apps/news/lib/feed.php';
|
||||
OC::$CLASSPATH['OC_News_Folder'] = 'apps/news/lib/folder.php';
|
||||
|
||||
OC::$CLASSPATH['OC_News_FeedMapper'] = 'apps/news/lib/feedmapper.php';
|
||||
OC::$CLASSPATH['OC_News_ItemMapper'] = 'apps/news/lib/itemmapper.php';
|
||||
OC::$CLASSPATH['OC_News_FolderMapper'] = 'apps/news/lib/foldermapper.php';
|
||||
|
||||
OC::$CLASSPATH['OC_News_Utils'] = 'apps/news/lib/utils.php';
|
||||
|
||||
|
||||
$l = new OC_l10n('news');
|
||||
|
||||
OCP\App::registerPersonal('news', 'settings');
|
||||
|
||||
OCP\App::register( array(
|
||||
'order' => 70,
|
||||
'id' => 'news',
|
||||
'name' => 'News'
|
||||
));
|
||||
|
||||
OCP\App::addNavigationEntry( array(
|
||||
'id' => 'news',
|
||||
'order' => 74,
|
||||
'href' => OC_Helper::linkTo( 'news', 'index.php' ),
|
||||
'icon' => OC_Helper::imagePath( 'news', 'icon.svg' ),
|
||||
'name' => $l->t('News')
|
||||
));
|
||||
|
|
@ -1,186 +0,0 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||
<database>
|
||||
<name>*dbname*</name>
|
||||
<create>true</create>
|
||||
<overwrite>false</overwrite>
|
||||
<charset>latin1</charset>
|
||||
<table>
|
||||
<name>*dbprefix*news_folders</name>
|
||||
<declaration>
|
||||
<field>
|
||||
<name>id</name>
|
||||
<type>integer</type>
|
||||
<default>0</default>
|
||||
<notnull>true</notnull>
|
||||
<autoincrement>1</autoincrement>
|
||||
<length>4</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>parent_id</name>
|
||||
<type>integer</type>
|
||||
<notnull>false</notnull>
|
||||
<length>4</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>name</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>100</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>user_id</name>
|
||||
<type>text</type>
|
||||
<default></default>
|
||||
<notnull>true</notnull>
|
||||
<length>64</length>
|
||||
</field>
|
||||
|
||||
<index>
|
||||
<name>folder_id</name>
|
||||
<unique>true</unique>
|
||||
<field>
|
||||
<name>id</name>
|
||||
<sorting>descending</sorting>
|
||||
</field>
|
||||
</index>
|
||||
<index>
|
||||
<name>user_id</name>
|
||||
<field>
|
||||
<name>user_id</name>
|
||||
</field>
|
||||
</index>
|
||||
</declaration>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<name>*dbprefix*news_feeds</name>
|
||||
<declaration>
|
||||
<field>
|
||||
<name>id</name>
|
||||
<type>integer</type>
|
||||
<default>0</default>
|
||||
<notnull>true</notnull>
|
||||
<autoincrement>1</autoincrement>
|
||||
<length>4</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>url</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>100</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>title</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>100</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>added</name>
|
||||
<type>integer</type>
|
||||
<default></default>
|
||||
<notnull>false</notnull>
|
||||
<unsigned>true</unsigned>
|
||||
<length>4</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>lastmodified</name>
|
||||
<type>integer</type>
|
||||
<default></default>
|
||||
<notnull>false</notnull>
|
||||
<unsigned>true</unsigned>
|
||||
<length>4</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>folder_id</name>
|
||||
<type>integer</type>
|
||||
<notnull>true</notnull>
|
||||
<length>4</length>
|
||||
</field>
|
||||
|
||||
<index>
|
||||
<name>feed_id</name>
|
||||
<unique>true</unique>
|
||||
<primary>true</primary>
|
||||
<field>
|
||||
<name>id</name>
|
||||
<sorting>descending</sorting>
|
||||
</field>
|
||||
</index>
|
||||
|
||||
<index>
|
||||
<name>feed_url</name>
|
||||
<unique>true</unique>
|
||||
<primary>false</primary>
|
||||
<field>
|
||||
<name>url</name>
|
||||
</field>
|
||||
</index>
|
||||
</declaration>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<name>*dbprefix*news_items</name>
|
||||
<declaration>
|
||||
<field>
|
||||
<name>id</name>
|
||||
<type>integer</type>
|
||||
<default>0</default>
|
||||
<notnull>true</notnull>
|
||||
<autoincrement>1</autoincrement>
|
||||
<length>4</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>guid</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>100</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>url</name>
|
||||
<type>text</type>
|
||||
<length>100</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>title</name>
|
||||
<type>text</type>
|
||||
<length>100</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>feed_id</name>
|
||||
<type>integer</type>
|
||||
<notnull>true</notnull>
|
||||
<length>4</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>body</name>
|
||||
<type>text</type>
|
||||
<length>4000</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>status</name>
|
||||
<type>integer</type>
|
||||
<length>1</length>
|
||||
</field>
|
||||
|
||||
<index>
|
||||
<name>item_id</name>
|
||||
<unique>true</unique>
|
||||
<field>
|
||||
<name>id</name>
|
||||
<sorting>descending</sorting>
|
||||
</field>
|
||||
</index>
|
||||
<index>
|
||||
<name>item_guid</name>
|
||||
<unique>true</unique>
|
||||
<field>
|
||||
<name>guid</name>
|
||||
</field>
|
||||
<field>
|
||||
<name>feed_id</name>
|
||||
</field>
|
||||
</index>
|
||||
</declaration>
|
||||
</table>
|
||||
</database>
|
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<info>
|
||||
<id>news</id>
|
||||
<name>News</name>
|
||||
<description>An RSS/Atom feed reader</description>
|
||||
<version>5.5</version>
|
||||
<licence>AGPL</licence>
|
||||
<author>Alessandro Cosentino</author>
|
||||
<require>4</require>
|
||||
</info>
|
|
@ -1,52 +0,0 @@
|
|||
li { padding-right: 0px !important; }
|
||||
|
||||
.collapsable { background: url('%webroot%/core/img/places/folder.svg') no-repeat left center; padding-left: 20px;}
|
||||
.news_input { float:left; font-size:12px; padding:4px 2px; border:solid 1px #aacfe4; width:200px; }
|
||||
.svg { border: inherit; background: inherit; }
|
||||
|
||||
#leftcontent { top: 3.5em !important; padding: 0; margin: 0; }
|
||||
#rightcontent { top: 3.5em !important; padding-top: 5px; }
|
||||
#feeds { background: #fff; width: 20em; left: 12.5em; top: 3.7em; bottom:3em; position: fixed; overflow: auto; padding: 0; margin: 0; }
|
||||
/* #feeds a { height: 23px; display: block; margin: 0 0 0 0; padding: 0 0 0 25px; } */
|
||||
#bottomcontrols { padding: 0; bottom:0px; overflow:visible; height:2.8em; width: 20em; margin:0; background:#eee; border-top:1px solid #ccc; position:fixed; -moz-box-shadow: 0 -3px 3px -3px #000; -webkit-box-shadow: 0 -3px 3px -3px #000; box-shadow: 0 -3px 3px -3px #000;}
|
||||
#feeds_delete { position: absolute; right: 0px; background: url('%webroot%/core/img/actions/delete.svg') no-repeat center; display: inline; }
|
||||
#feeds_edit { position: absolute; right: 1.6em; background: url('%webroot%/core/img/actions/rename.svg') no-repeat center; display: inline; }
|
||||
|
||||
#dropdownBtn { width: 9em; padding-left: 0; padding-right:20px; background: url('%webroot%/core/img/actions/triangle-s.svg') no-repeat right center; }
|
||||
|
||||
#addfolder { background: url('%webroot%/core/img/places/folder.svg') no-repeat left center; padding-left: 20px; }
|
||||
#addfeed { background: url('%appswebroot%/apps/news/img/rss.svg') no-repeat left center; padding-left: 20px; }
|
||||
|
||||
ul.controls li { float: left; }
|
||||
|
||||
.accordion .title_unread { background: #DCDCDC; font-size: 12px; border-bottom:1px solid #ccc; font-weight:bold;}
|
||||
.accordion .title_read { background: #DCDCDC; font-size: 12px; border-bottom:1px solid #ccc;}
|
||||
|
||||
ul.menu { position: absolute; z-index:100; margin-left: 0.3em;
|
||||
display: none;
|
||||
background:#EEEEEE; /* default background for browsers without gradient support */
|
||||
/* css3 */
|
||||
background:-webkit-gradient(linear, 0 0, 0 100%, from(#DCDCDC), to(#EEEEEE));
|
||||
background:-moz-linear-gradient(#DCDCDC, #EEEEEE);
|
||||
background:-o-linear-gradient(#DCDCDC, #EEEEEE);
|
||||
background:linear-gradient(#DCDCDC, #EEEEEE);
|
||||
/*
|
||||
-webkit-border-radius:10px;
|
||||
-moz-border-radius:10px;
|
||||
border-radius:10px;
|
||||
*/
|
||||
}
|
||||
|
||||
ul#dropdownmenu { left: 0em; box-shadow: 0px 0px 10px rgb(0, 0, 0); }
|
||||
|
||||
ul#feedfoldermenu { position:fixed; margin-left: 0; bottom: 2.8em; border-left:1px solid #ccc; border-top:1px solid #ccc; border-right:1px solid #ccc; -moz-box-shadow: 0 -3px 3px -3px #000; -webkit-box-shadow: 0 -3px 3px -3px #000; box-shadow: 0 -3px 3px -3px #000;}
|
||||
|
||||
li.menuItem { margin-left:0.7em; margin-right:0.7em; float: none !important; text-align: left; }
|
||||
|
||||
li.folder_list:hover { color: rgb(0, 0, 0) !important; background: none !important; }
|
||||
li.feeds_list:hover { background: none repeat scroll 0% 0% rgb(221, 221, 221) !important; }
|
||||
div.collapsable:hover { background-color: rgb(221, 221, 221); }
|
||||
div.add_parentfolder { position: relative; }
|
||||
|
||||
div.dialog { overflow: visible; }
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
// Check if we are a user
|
||||
OCP\User::checkLoggedIn();
|
||||
|
||||
OCP\App::checkAppEnabled('news');
|
||||
OCP\App::setActiveNavigationEntry('news');
|
||||
|
||||
OCP\Util::addscript('news','news');
|
||||
OCP\Util::addStyle('news','news');
|
||||
|
||||
$l = OC_L10N::get('news');
|
||||
|
||||
$foldermapper = new OC_News_FolderMapper(OCP\USER::getUser());
|
||||
|
||||
$allfeeds = $foldermapper->populate($l->t('Everything'), 0);
|
||||
|
||||
if ($allfeeds) {
|
||||
$feedid = isset( $_GET['feedid'] ) ? $_GET['feedid'] : null;
|
||||
if ($feedid == null) {
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
$feedid = 0;
|
||||
}
|
||||
|
||||
$tmpl = new OCP\Template( 'news', 'main', 'user' );
|
||||
$tmpl->assign('allfeeds', $allfeeds);
|
||||
$tmpl->assign('feedid', $feedid);
|
||||
$tmpl->printPage();
|
||||
|
||||
?>
|
|
@ -1,196 +0,0 @@
|
|||
News={
|
||||
DropDownMenu: {
|
||||
fade:function(menu){
|
||||
var list = $(menu).toggle();
|
||||
return false;
|
||||
},
|
||||
dropdown:function(button){
|
||||
var list = $(button).parent().find('ul#dropdownmenu');
|
||||
if (list.css('display') == 'none')
|
||||
list.slideDown('fast').show();
|
||||
else
|
||||
list.slideUp('fast');
|
||||
|
||||
return false;
|
||||
},
|
||||
selectItem:function(item, folderid){
|
||||
var parent = $(item).parent().parent();
|
||||
parent.find('#dropdownBtn').text($(item).text());
|
||||
parent.find(':input[name="folderid"]').val(folderid);
|
||||
parent.find('ul#dropdownmenu').slideUp('fast');
|
||||
}
|
||||
},
|
||||
UI: {
|
||||
overview:function(dialogtype, dialogfile){
|
||||
if($(dialogtype).dialog('isOpen') == true){
|
||||
$(dialogtype).dialog('moveToTop');
|
||||
}else{
|
||||
$('#dialog_holder').load(OC.filePath('news', 'ajax', dialogfile), function(jsondata){
|
||||
if(jsondata.status != 'error'){
|
||||
$(dialogtype).dialog({
|
||||
dialogClass:'dialog',
|
||||
minWidth: 600,
|
||||
close: function(event, ui) {
|
||||
$(this).dialog('destroy').remove();
|
||||
}
|
||||
}).css('overflow','visible');
|
||||
} else {
|
||||
alert(jsondata.data.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
return false;
|
||||
}
|
||||
},
|
||||
Folder: {
|
||||
submit:function(button){
|
||||
var displayname = $("#folder_add_name").val().trim();
|
||||
|
||||
if(displayname.length == 0) {
|
||||
OC.dialogs.alert(t('news', 'Displayname cannot be empty.'), t('news', 'Error'));
|
||||
return false;
|
||||
}
|
||||
|
||||
$(button).attr("disabled", true);
|
||||
//translation here!!!
|
||||
$(button).prop('value', 'Adding...');
|
||||
|
||||
var folderid = $('#inputfolderid:input[name="folderid"]').val();
|
||||
|
||||
var url;
|
||||
url = OC.filePath('news', 'ajax', 'createfolder.php');
|
||||
|
||||
$.post(url, { name: displayname, parentid: folderid },
|
||||
function(jsondata){
|
||||
if(jsondata.status == 'success'){
|
||||
//$(button).closest('tr').prev().html(jsondata.page).show().next().remove();
|
||||
OC.dialogs.alert(jsondata.data.message, t('news', 'Success!'));
|
||||
} else {
|
||||
OC.dialogs.alert(jsondata.data.message, t('news', 'Error'));
|
||||
}
|
||||
$("#folder_add_name").val('');
|
||||
$(button).attr("disabled", false);
|
||||
//translation here!!!
|
||||
$(button).prop('value', 'Add folder');
|
||||
});
|
||||
},
|
||||
'delete':function(folderid) {
|
||||
$('#feeds_delete').tipsy('hide');
|
||||
OC.dialogs.confirm(t('news', 'Are you sure you want to delete this folder and all its feeds?'), t('news', 'Warning'), function(answer) {
|
||||
if(answer == true) {
|
||||
$.post(OC.filePath('news', 'ajax', 'deletefolder.php'),{'folderid':folderid},function(jsondata){
|
||||
if(jsondata.status == 'success'){
|
||||
alert('removed!');
|
||||
}
|
||||
else{
|
||||
OC.dialogs.alert(jsondata.data.message, t('news', 'Error'));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
},
|
||||
Feed: {
|
||||
id:'',
|
||||
submit:function(button){
|
||||
var feedurl = $("#feed_add_url").val().trim();
|
||||
|
||||
if(feedurl.length == 0) {
|
||||
OC.dialogs.alert(t('news', 'URL cannot be empty.'), t('news', 'Error'));
|
||||
return false;
|
||||
}
|
||||
|
||||
$(button).attr("disabled", true);
|
||||
//translation here!!!
|
||||
$(button).prop('value', 'Adding...');
|
||||
|
||||
var folderid = $('#inputfolderid:input[name="folderid"]').val();
|
||||
|
||||
var url;
|
||||
url = OC.filePath('news', 'ajax', 'createfeed.php');
|
||||
|
||||
$.post(url, { feedurl: feedurl, folderid: folderid },
|
||||
function(jsondata){
|
||||
if(jsondata.status == 'success'){
|
||||
OC.dialogs.alert(jsondata.data.message, t('news', 'Success!'));
|
||||
} else {
|
||||
OC.dialogs.alert(jsondata.data.message, t('news', 'Error'));
|
||||
}
|
||||
$("#feed_add_url").val('');
|
||||
$(button).attr("disabled", false);
|
||||
//translation here!!!
|
||||
$(button).prop('value', 'Add feed');
|
||||
});
|
||||
},
|
||||
'delete':function(feedid) {
|
||||
$('#feeds_delete').tipsy('hide');
|
||||
OC.dialogs.confirm(t('news', 'Are you sure you want to delete this feed?'), t('news', 'Warning'), function(answer) {
|
||||
if(answer == true) {
|
||||
$.post(OC.filePath('news', 'ajax', 'deletefeed.php'),{'feedid':feedid},function(jsondata){
|
||||
if(jsondata.status == 'success'){
|
||||
$('#leftcontent [data-id="'+jsondata.data.feedid+'"]').remove();
|
||||
//change the right view too (maybe a message to subscribe, like in Google Reader?)
|
||||
}
|
||||
else{
|
||||
OC.dialogs.alert(jsondata.data.message, t('news', 'Error'));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
return false;
|
||||
},
|
||||
markItem:function(itemid) {
|
||||
$.post(OC.filePath('news', 'ajax', 'markitem.php'),{'itemid':itemid},function(jsondata){
|
||||
if(jsondata.status == 'success'){
|
||||
var $currentitem = $('#rightcontent [data-id="'+jsondata.data.itemid+'"]');
|
||||
$currentitem.removeClass('title_unread');
|
||||
$currentitem.addClass('title_read');
|
||||
//set a timeout for this
|
||||
}
|
||||
else{
|
||||
OC.dialogs.alert(jsondata.data.message, t('news', 'Error'));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
|
||||
$('#addfeed').click(function() {
|
||||
News.UI.overview('#addfeed_dialog','feeddialog.php');
|
||||
$(this).parent().toggle();
|
||||
});
|
||||
$('#addfolder').click(function() {
|
||||
News.UI.overview('#addfolder_dialog','folderdialog.php');
|
||||
$(this).parent().toggle();
|
||||
});
|
||||
|
||||
$('.collapsable').click(function(){
|
||||
$(this).parent().children().toggle();
|
||||
$(this).toggle();
|
||||
});
|
||||
|
||||
$('.accordion .title_unread').click(function() {
|
||||
$(this).next().toggle();
|
||||
return false;
|
||||
}).next().hide();
|
||||
|
||||
$('.accordion .title_read').click(function() {
|
||||
$(this).next().toggle();
|
||||
return false;
|
||||
}).next().hide();
|
||||
|
||||
var list = $('.collapsable,.feeds_list').hover(function() {
|
||||
var elem = $(this).find('#feeds_delete,#feeds_edit');
|
||||
if(elem.css('display') == 'none')
|
||||
elem.css('display', 'inline');
|
||||
else
|
||||
elem.css('display', 'none');
|
||||
|
||||
return false;
|
||||
});
|
||||
list.find('#feeds_delete').hide();
|
||||
list.find('#feeds_edit').hide();
|
||||
});
|
|
@ -1,15 +0,0 @@
|
|||
$(document).ready(function(){
|
||||
|
||||
|
||||
|
||||
$('#somesetting').blur(function(event){
|
||||
event.preventDefault();
|
||||
var post = $( "#somesetting" ).serialize();
|
||||
$.post( OC.filePath('apptemplate','ajax','seturl.php') , post, function(data){ OC.msg.finishedSaving('#somesetting .msg', data); });
|
||||
});
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class models a collection, which is either a feed or a folder.
|
||||
*/
|
||||
class OC_News_Collection {
|
||||
|
||||
private $id;
|
||||
|
||||
public function __construct($id){
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
public function getId(){
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function setId($id){
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class models a feed.
|
||||
*/
|
||||
class OC_News_Feed extends OC_News_Collection {
|
||||
|
||||
private $url;
|
||||
private $spfeed; //encapsulate a SimplePie_Core object
|
||||
private $items; //array that contains all the items of the feed
|
||||
|
||||
public function __construct($url, $title, $items, $id = null){
|
||||
$this->url = $url;
|
||||
$this->title = $title;
|
||||
$this->items = $items;
|
||||
if ($id !== null){
|
||||
parent::__construct($id);
|
||||
}
|
||||
}
|
||||
|
||||
public function getUrl(){
|
||||
return $this->url;
|
||||
}
|
||||
|
||||
public function getTitle(){
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
public function setItems($items){
|
||||
$this->items = $items;
|
||||
}
|
||||
|
||||
public function getItems(){
|
||||
return $this->items;
|
||||
}
|
||||
}
|
|
@ -1,182 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class maps a feed to an entry in the feeds table of the database.
|
||||
*/
|
||||
class OC_News_FeedMapper {
|
||||
|
||||
const tableName = '*PREFIX*news_feeds';
|
||||
|
||||
/**
|
||||
* @brief Retrieve a feed from the database
|
||||
* @param id The id of the feed in the database table.
|
||||
* @returns
|
||||
*/
|
||||
public function findById($id){
|
||||
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE id = ?');
|
||||
$result = $stmt->execute(array($id));
|
||||
$row = $result->fetchRow();
|
||||
$url = $row['url'];
|
||||
$title = $row['title'];
|
||||
$feed = new OC_News_Feed($url, $title, null, $id);
|
||||
return $feed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Retrieve a feed from the database
|
||||
* @param id The id of the feed in the database table.
|
||||
* @returns
|
||||
*/
|
||||
public function findByFolderId($folderid){
|
||||
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE folder_id = ?');
|
||||
$result = $stmt->execute(array($folderid));
|
||||
$feeds = array();
|
||||
while ($row = $result->fetchRow()) {
|
||||
$url = $row['url'];
|
||||
$title = $row['title'];
|
||||
$id = $row['id'];
|
||||
$feed = new OC_News_Feed($url, $title, null, $id);
|
||||
$feeds[] = $feed;
|
||||
}
|
||||
return $feeds;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Retrieve a feed and all its items from the database
|
||||
* @param id The id of the feed in the database table.
|
||||
* @returns
|
||||
*/
|
||||
public function findWithItems($id){
|
||||
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE id = ?');
|
||||
$result = $stmt->execute(array($id));
|
||||
$row = $result->fetchRow();
|
||||
$url = $row['url'];
|
||||
$title = $row['title'];
|
||||
$feed = new OC_News_Feed($url, $title, null,$id);
|
||||
|
||||
$itemMapper = new OC_News_ItemMapper();
|
||||
$items = $itemMapper->findAll($id);
|
||||
$feed->setItems($items);
|
||||
|
||||
return $feed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Find the id of a feed and all its items from the database
|
||||
* @param url url of the feed
|
||||
* @return id of the feed corresponding to the url passed as parameters
|
||||
* null - if there is no such feed
|
||||
*/
|
||||
public function findIdFromUrl($url){
|
||||
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE url = ?');
|
||||
$result = $stmt->execute(array($url));
|
||||
$row = $result->fetchRow();
|
||||
$id = null;
|
||||
if ($row != null){
|
||||
$id = $row['id'];
|
||||
}
|
||||
return $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Save the feed and all its items into the database
|
||||
* @param feed the feed to be saved
|
||||
* @returns The id of the feed in the database table.
|
||||
*/
|
||||
//TODO: handle error case
|
||||
public function save(OC_News_Feed $feed, $folderid){
|
||||
$CONFIG_DBTYPE = OCP\Config::getSystemValue( "dbtype", "sqlite" );
|
||||
if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){
|
||||
$_ut = "strftime('%s','now')";
|
||||
} elseif($CONFIG_DBTYPE == 'pgsql') {
|
||||
$_ut = 'date_part(\'epoch\',now())::integer';
|
||||
} else {
|
||||
$_ut = "UNIX_TIMESTAMP()";
|
||||
}
|
||||
|
||||
$title = $feed->getTitle();
|
||||
$url = htmlspecialchars_decode($feed->getUrl());
|
||||
|
||||
if(empty($title)) {
|
||||
$l = OC_L10N::get('news');
|
||||
$title = $l->t('no title');
|
||||
}
|
||||
|
||||
//FIXME: Detect when feed contains already a database id
|
||||
$feedid = $this->findIdFromUrl($url);
|
||||
if ($feedid == null){
|
||||
$query = OCP\DB::prepare('
|
||||
INSERT INTO ' . self::tableName .
|
||||
'(url, title, folder_id, added, lastmodified)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
');
|
||||
|
||||
$params=array(
|
||||
$url,
|
||||
htmlspecialchars_decode($title),
|
||||
$folderid,
|
||||
$_ut,
|
||||
$_ut
|
||||
);
|
||||
$query->execute($params);
|
||||
|
||||
$feedid = OCP\DB::insertid(self::tableName);
|
||||
}
|
||||
$feed->setId($feedid);
|
||||
|
||||
$itemMapper = new OC_News_ItemMapper();
|
||||
|
||||
$items = $feed->getItems();
|
||||
foreach($items as $item){
|
||||
$itemMapper->save($item, $feedid);
|
||||
}
|
||||
|
||||
return $feedid;
|
||||
}
|
||||
|
||||
public function deleteById($id){
|
||||
if ($id == null) {
|
||||
return false;
|
||||
}
|
||||
$stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE id = ?');
|
||||
|
||||
$result = $stmt->execute(array($id));
|
||||
|
||||
$itemMapper = new OC_News_ItemMapper();
|
||||
//TODO: handle the value that the execute returns
|
||||
$itemMapper->deleteAll($id);
|
||||
|
||||
return true;
|
||||
}
|
||||
public function delete(OC_News_Feed $feed){
|
||||
$id = $feed->getId();
|
||||
return deleteById($id);
|
||||
}
|
||||
|
||||
//it's more complicated tan this...recursive delete, or delete with a join
|
||||
public function deleteAll($folderdid){
|
||||
if ($folderid == null) {
|
||||
return false;
|
||||
}
|
||||
$stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE folder_id = ?');
|
||||
|
||||
$result = $stmt->execute(array($folderid));
|
||||
|
||||
$itemMapper = new OC_News_ItemMapper();
|
||||
//TODO: handle the value that the execute returns
|
||||
$itemMapper->deleteAll($id);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class models a folder that contains feeds.
|
||||
*/
|
||||
class OC_News_Folder extends OC_News_Collection {
|
||||
|
||||
private $name;
|
||||
private $children;
|
||||
private $parent;
|
||||
|
||||
public function __construct($name, $id = null, OC_News_Collection $parent = null){
|
||||
$this->name = $name;
|
||||
if ($id !== null){
|
||||
parent::__construct($id);
|
||||
}
|
||||
$this->children = array();
|
||||
if ($parent !== null){
|
||||
$this->parent = $parent;
|
||||
}
|
||||
}
|
||||
|
||||
public function getName(){
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function setName($name){
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
public function getParentId(){
|
||||
if ($this->parent === null){
|
||||
return 0;
|
||||
}
|
||||
return $this->parent->getId();
|
||||
}
|
||||
|
||||
public function addChild(OC_News_Collection $child){
|
||||
$this->children[] = $child;
|
||||
}
|
||||
|
||||
public function getChildren(){
|
||||
return $this->children;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,148 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class maps a feed to an entry in the feeds table of the database.
|
||||
*/
|
||||
class OC_News_FolderMapper {
|
||||
|
||||
const tableName = '*PREFIX*news_folders';
|
||||
|
||||
private $userid;
|
||||
|
||||
public function __construct($userid = null){
|
||||
if ($userid !== null) {
|
||||
$this->userid = $userid;
|
||||
}
|
||||
$userid = OCP\USER::getUser();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create a folder and populate with children from the database
|
||||
* @param id The id of the folder.
|
||||
* @param name The name of the folder.
|
||||
* @returns an instance of OC_News_Folder
|
||||
*/
|
||||
public function populate($name, $id){
|
||||
$root = new OC_News_Folder($name, $id);
|
||||
$stmt = OCP\DB::prepare('SELECT *
|
||||
FROM ' . self::tableName .
|
||||
' WHERE user_id = ? AND parent_id = ?');
|
||||
$result = $stmt->execute(array($this->userid, $id));
|
||||
|
||||
while( $row = $result->fetchRow()){
|
||||
$child = OC_News_FolderMapper::populate($row['name'], $row['id']);
|
||||
$root->addChild($child);
|
||||
}
|
||||
|
||||
$feedmapper = new OC_News_FeedMapper();
|
||||
$feeds = $feedmapper->findByFolderId($id);
|
||||
foreach ($feeds as $feed){
|
||||
$root->addChild($feed);
|
||||
}
|
||||
|
||||
return $root;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Retrieve a folder from the database
|
||||
* @param id The id of the folder in the database table.
|
||||
* @returns an instance of OC_News_Folder
|
||||
*/
|
||||
public function find($id){
|
||||
$stmt = OCP\DB::prepare('SELECT *
|
||||
FROM ' . self::tableName .
|
||||
' WHERE user_id = ? AND id = ?');
|
||||
$result = $stmt->execute(array($this->userid, $id));
|
||||
|
||||
$row = $result->fetchRow();
|
||||
$folder = new OC_News_Folder($row['name'], $row['id']);
|
||||
|
||||
return $folder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Retrieve a feed and all its items from the database
|
||||
* @param id The id of the feed in the database table.
|
||||
* @returns
|
||||
*/
|
||||
public function findWithItems($id){
|
||||
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE id = ?');
|
||||
$result = $stmt->execute(array($id));
|
||||
$row = $result->fetchRow();
|
||||
$url = $row['url'];
|
||||
$title = $row['title'];
|
||||
$feed = new OC_News_Feed($url, $title, null,$id);
|
||||
|
||||
$itemMapper = new OC_News_ItemMapper($feed);
|
||||
$items = $itemMapper->findAll();
|
||||
$feed->setItems($items);
|
||||
|
||||
return $feed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Store the folder and all its feeds into the database
|
||||
* @param folder the folder to be saved
|
||||
* @returns The id of the folder in the database table.
|
||||
*/
|
||||
public function save(OC_News_Folder $folder){
|
||||
$query = OCP\DB::prepare('
|
||||
INSERT INTO ' . self::tableName .
|
||||
'(name, parent_id, user_id)
|
||||
VALUES (?, ?, ?)
|
||||
');
|
||||
|
||||
$name = $folder->getName();
|
||||
|
||||
if(empty($name)) {
|
||||
$l = OC_L10N::get('news');
|
||||
$name = $l->t('no name');
|
||||
}
|
||||
|
||||
$parentid = $folder->getParentId();
|
||||
|
||||
$params=array(
|
||||
htmlspecialchars_decode($name),
|
||||
$parentid,
|
||||
$this->userid
|
||||
);
|
||||
$query->execute($params);
|
||||
$folderid = OCP\DB::insertid(self::tableName);
|
||||
|
||||
$folder->setId($folderid);
|
||||
return $folderid;
|
||||
}
|
||||
|
||||
public function delete(OC_News_Folder $folder){
|
||||
$folderid = $folder->getId();
|
||||
return deleteById(folderid);
|
||||
}
|
||||
|
||||
//TODO: replace it with a DELETE INNER JOIN operation
|
||||
public function deleteById($folderid){
|
||||
if ($folderid == null){
|
||||
return false;
|
||||
}
|
||||
|
||||
$stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE id = ?');
|
||||
|
||||
$result = $stmt->execute(array($folderid));
|
||||
|
||||
$feedMapper = new OC_News_FeedMapper();
|
||||
//TODO: handle the value that the execute returns
|
||||
$feedMapper->deleteAll($folderid);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,122 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
class StatusFlag{
|
||||
const Unread = 0x02;
|
||||
const Important = 0x04;
|
||||
const Deleted = 0x08;
|
||||
const Updated = 0x16;
|
||||
}
|
||||
|
||||
/**
|
||||
* This class models an item.
|
||||
*
|
||||
* It encapsulate a SimplePie_Item object and adds a status flag to it
|
||||
*/
|
||||
class OC_News_Item {
|
||||
|
||||
private $url;
|
||||
private $title;
|
||||
private $guid;
|
||||
private $body;
|
||||
private $status; //a bit-field set with status flags
|
||||
private $id; //id of the item in the database table
|
||||
|
||||
public function __construct($url, $title, $guid, $body, $id = null){
|
||||
$this->title = $title;
|
||||
$this->url = $url;
|
||||
$this->guid = $guid;
|
||||
$this->body = $body;
|
||||
if ($id == null) {
|
||||
$this->status |= StatusFlag::Unread;
|
||||
}
|
||||
else {
|
||||
$this->id = $id;
|
||||
}
|
||||
}
|
||||
|
||||
public function getGuid(){
|
||||
return $this->guid;
|
||||
}
|
||||
|
||||
public function setGuid($guid){
|
||||
$this->guid = $guid;
|
||||
}
|
||||
|
||||
public function getId(){
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function setId($id){
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
public function setRead(){
|
||||
$this->status &= ~StatusFlag::Unread;
|
||||
}
|
||||
|
||||
public function setUnread(){
|
||||
$this->status |= StatusFlag::Unread;
|
||||
}
|
||||
|
||||
public function isRead(){
|
||||
return !($this->status & StatusFlag::Unread);
|
||||
}
|
||||
|
||||
public function setImportant(){
|
||||
$this->status |= StatusFlag::Important;
|
||||
}
|
||||
|
||||
public function setUnimportant(){
|
||||
$this->status &= ~StatusFlag::Important;
|
||||
}
|
||||
|
||||
public function isImportant(){
|
||||
return ($this->status & StatusFlag::Important);
|
||||
}
|
||||
|
||||
/**
|
||||
* NOTE: this is needed to store items in the database, otherwise
|
||||
* the status of an item should be retrieved with methods: isRead(), isImportant(), ...
|
||||
*/
|
||||
public function getStatus(){
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
public function setStatus($status){
|
||||
$this->status = $status;
|
||||
}
|
||||
|
||||
public function getTitle(){
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
public function setTitle($title){
|
||||
$this->title = $title;
|
||||
}
|
||||
|
||||
public function getUrl(){
|
||||
return $this->url;
|
||||
}
|
||||
|
||||
public function setUrl($url){
|
||||
$this->url = $url;
|
||||
}
|
||||
|
||||
public function getBody(){
|
||||
return $this->body;
|
||||
}
|
||||
|
||||
public function setBody($body){
|
||||
$this->body = $body;
|
||||
}
|
||||
}
|
|
@ -1,171 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class maps an item to a row of the items table in the database.
|
||||
* It follows the Data Mapper pattern (see http://martinfowler.com/eaaCatalog/dataMapper.html).
|
||||
*/
|
||||
class OC_News_ItemMapper {
|
||||
|
||||
const tableName = '*PREFIX*news_items';
|
||||
|
||||
public function fromRow($row){
|
||||
$url = $row['url'];
|
||||
$title = $row['title'];
|
||||
$guid = $row['guid'];
|
||||
$status = $row['status'];
|
||||
$body = $row['body'];
|
||||
$id = $row['id'];
|
||||
$item = new OC_News_Item($url, $title, $guid, $body, $id);
|
||||
$item->setStatus($status);
|
||||
|
||||
return $item;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Retrieve all the item corresponding to a feed from the database
|
||||
* @param feedid The id of the feed in the database table.
|
||||
*/
|
||||
public function findAll($feedid){
|
||||
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE feed_id = ?');
|
||||
$result = $stmt->execute(array($feedid));
|
||||
|
||||
$items = array();
|
||||
while ($row = $result->fetchRow()) {
|
||||
$item = $this->fromRow($row);
|
||||
$items[] = $item;
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
|
||||
public function findIdFromGuid($guid, $feedid){
|
||||
$stmt = OCP\DB::prepare('
|
||||
SELECT * FROM ' . self::tableName . '
|
||||
WHERE guid = ?
|
||||
AND feed_id = ?
|
||||
');
|
||||
$result = $stmt->execute(array($guid, $feedid));
|
||||
$row = $result->fetchRow();
|
||||
$id = null;
|
||||
if ($row != null){
|
||||
$id = $row['id'];
|
||||
}
|
||||
return $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Update the item after its status has changed
|
||||
* @returns The item whose status has changed.
|
||||
*/
|
||||
public function update(OC_News_Item $item){
|
||||
|
||||
$itemid = $item->getId();
|
||||
$status = $item->getStatus();
|
||||
|
||||
$stmt = OCP\DB::prepare('
|
||||
UPDATE ' . self::tableName .
|
||||
' SET status = ?
|
||||
WHERE id = ?
|
||||
');
|
||||
|
||||
$params=array(
|
||||
$status,
|
||||
$itemid
|
||||
);
|
||||
$stmt->execute($params);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Save the feed and all its items into the database
|
||||
* @returns The id of the feed in the database table.
|
||||
*/
|
||||
public function save(OC_News_Item $item, $feedid){
|
||||
$guid = $item->getGuid();
|
||||
$status = $item->getStatus();
|
||||
|
||||
$itemid = $this->findIdFromGuid($guid, $feedid);
|
||||
|
||||
if ($itemid == null){
|
||||
$title = $item->getTitle();
|
||||
$body = $item->getBody();
|
||||
|
||||
$stmt = OCP\DB::prepare('
|
||||
INSERT INTO ' . self::tableName .
|
||||
'(url, title, body, guid, feed_id, status)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
');
|
||||
|
||||
if(empty($title)) {
|
||||
$l = OC_L10N::get('news');
|
||||
$title = $l->t('no title');
|
||||
}
|
||||
|
||||
if(empty($body)) {
|
||||
$l = OC_L10N::get('news');
|
||||
$body = $l->t('no body');
|
||||
}
|
||||
|
||||
$params=array(
|
||||
htmlspecialchars_decode($item->getUrl()),
|
||||
htmlspecialchars_decode($title),
|
||||
$body,
|
||||
$guid,
|
||||
$feedid,
|
||||
$status
|
||||
);
|
||||
|
||||
$stmt->execute($params);
|
||||
|
||||
$itemid = OCP\DB::insertid(self::tableName);
|
||||
}
|
||||
else {
|
||||
$this->update($item);
|
||||
}
|
||||
$item->setId($itemid);
|
||||
return $itemid;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Retrieve an item from the database
|
||||
* @param id The id of the feed in the database table.
|
||||
*/
|
||||
public function find($id){
|
||||
$stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE id = ?');
|
||||
$result = $stmt->execute(array($id));
|
||||
$row = $result->fetchRow();
|
||||
|
||||
$item = $this->fromRow($row);
|
||||
|
||||
return $item;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Permanently delete all items belonging to a feed from the database
|
||||
* @param feedid The id of the feed that we wish to delete
|
||||
* @return
|
||||
*/
|
||||
public function deleteAll($feedid){
|
||||
if ($feedid == null) {
|
||||
return false;
|
||||
}
|
||||
$stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE feed_id = ?');
|
||||
|
||||
$result = $stmt->execute(array($feedid));
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud - News app
|
||||
*
|
||||
* @author Alessandro Cosentino
|
||||
* Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file
|
||||
*
|
||||
*/
|
||||
|
||||
// load SimplePie library
|
||||
//TODO: is this file a suitable place for the following require?
|
||||
require_once('news/3rdparty/SimplePie/SimplePieAutoloader.php');
|
||||
|
||||
class OC_News_Utils {
|
||||
|
||||
/**
|
||||
* @brief Fetch a feed from remote
|
||||
* @param url remote url of the feed
|
||||
* @returns
|
||||
*/
|
||||
public static function fetch($url){
|
||||
//TODO: handle the case where fetching of the feed fails
|
||||
$spfeed = new SimplePie_Core();
|
||||
$spfeed->set_feed_url( $url );
|
||||
$spfeed->enable_cache( false );
|
||||
$spfeed->init();
|
||||
$spfeed->handle_content_type();
|
||||
$title = $spfeed->get_title();
|
||||
|
||||
$spitems = $spfeed->get_items();
|
||||
$items = array();
|
||||
foreach($spitems as $spitem) { //FIXME: maybe we can avoid this loop
|
||||
$itemUrl = $spitem->get_permalink();
|
||||
$itemTitle = $spitem->get_title();
|
||||
$itemGUID = $spitem->get_id();
|
||||
$itemBody = $spitem->get_content();
|
||||
$items[] = new OC_News_Item($itemUrl, $itemTitle, $itemGUID, $itemBody);
|
||||
}
|
||||
|
||||
$feed = new OC_News_Feed($url, $title, $items);
|
||||
return $feed;
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
<?php
|
||||
|
||||
//OCP\Util::addscript( "news", "admin" );
|
||||
|
||||
$tmpl = new OCP\Template( 'news', 'settings');
|
||||
|
||||
return $tmpl->fetchPage();
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
<div id="leftcontent" class="leftcontent">
|
||||
<ul id="feeds">
|
||||
<?php echo $this->inc("part.feeds"); ?>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<ul class="menu" id="feedfoldermenu">
|
||||
<li class="menuItem" id="addfeed"><?php echo $l->t('Feed'); ?></li>
|
||||
<li class="menuItem" id="addfolder"><?php echo $l->t('Folder'); ?></li>
|
||||
</ul>
|
||||
|
||||
<div id="bottomcontrols">
|
||||
<ul class="controls">
|
||||
<li>
|
||||
<button class="svg" id="addfeedfolder" title="<?php echo $l->t('Add Feed/Folder'); ?>" onclick="News.DropDownMenu.fade('ul#feedfoldermenu')"><img class="svg" src="<?php echo OCP\Util::linkTo('news', 'img/add.svg'); ?>" alt="<?php echo $l->t('Add Feed/Folder'); ?>" /></button>
|
||||
</li>
|
||||
<li><button class="svg" title="<?php echo $l->t('Change View'); ?>">Eye</button></li>
|
||||
<li><button class="svg" title="<?php echo $l->t('Settings'); ?>">Settings</button></li>
|
||||
<ul>
|
||||
</div>
|
||||
|
||||
<div id="rightcontent" class="rightcontent" data-id="<?php echo $_['feedid']; ?>">
|
||||
<?php
|
||||
if ($_['feedid']){
|
||||
echo $this->inc("part.items");
|
||||
}
|
||||
else {
|
||||
echo $this->inc("part.nofeeds");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<!-- Dialogs -->
|
||||
<div id="dialog_holder"></div>
|
||||
<!-- End of Dialogs -->
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
|
||||
<div id="addfeed_dialog" title="<?php echo $l->t("Add Feed"); ?>">
|
||||
<table width="100%" style="border: 0;">
|
||||
<tr>
|
||||
<td>Add new feed</td>
|
||||
<td>
|
||||
<div class="add_parentfolder">
|
||||
<button id="dropdownBtn" onclick="News.DropDownMenu.dropdown(this)">
|
||||
<?php echo $l->t('EVERYTHING'); ?>
|
||||
</button>
|
||||
<input id="inputfolderid" type="hidden" name="folderid" value="0" />
|
||||
<ul class="menu" id="dropdownmenu">
|
||||
<?php echo $this->inc("part.folderlist"); ?>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" id="feed_add_url" placeholder="<?php echo $l->t('URL'); ?>" class="news_input" /></td>
|
||||
<td><input type="submit" value="<?php echo $l->t('Add feed'); ?>" onclick="News.Feed.submit(this)" id="feed_add_submit" /></td>
|
||||
</tr>
|
||||
</table>
|
|
@ -1,22 +0,0 @@
|
|||
|
||||
<div id="addfolder_dialog" title="<?php echo $l->t("Add Folder"); ?>">
|
||||
<table width="100%" style="border: 0;">
|
||||
<tr>
|
||||
<td>Add new folder</td>
|
||||
<td>
|
||||
<div class="add_parentfolder">
|
||||
<button id="dropdownBtn" onclick="News.DropDownMenu.dropdown(this)">
|
||||
<?php echo $l->t('EVERYTHING'); ?>
|
||||
</button>
|
||||
<input id="inputfolderid" type="hidden" name="folderid" value="0" />
|
||||
<ul class="menu" id="dropdownmenu">
|
||||
<?php echo $this->inc("part.folderlist"); ?>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" id="folder_add_name" placeholder="<?php echo $l->t('Folder name'); ?>" class="news_input" /></td>
|
||||
<td><input type="submit" value="<?php echo $l->t('Add folder'); ?>" onclick="News.Folder.submit(this)" id="folder_add_submit" /></td>
|
||||
</tr>
|
||||
</table>
|
|
@ -1,31 +0,0 @@
|
|||
<?php
|
||||
function print_folder(OC_News_Folder $folder, $depth){
|
||||
$l = new OC_l10n('news');
|
||||
|
||||
echo '<ul style="margin-left:' . 10*$depth . 'px;"> <li class="folder_list" >' .
|
||||
'<div class="collapsable" >' . strtoupper($folder->getName()) .
|
||||
( ($depth != 0) ? '<button class="svg action" id="feeds_delete" onClick="(News.Folder.delete(' . $folder->getId(). '))" title="' . $l->t('Delete folder') . '"></button>' .
|
||||
'<button class="svg action" id="feeds_edit" title="' . $l->t('Rename folder') . '"></button>': '' ) .
|
||||
'</div>';
|
||||
echo '<ul>';
|
||||
$children = $folder->getChildren();
|
||||
foreach($children as $child) {
|
||||
if ($child instanceOf OC_News_Folder){
|
||||
print_folder($child, $depth+1);
|
||||
}
|
||||
elseif ($child instanceOf OC_News_Feed) { //onhover $(element).attr('id', 'newID');
|
||||
|
||||
echo '<li class="feeds_list" data-id="' . $child->getId() . '"><a href="' . OCP\Util::linkTo('news', 'index.php'). '?feedid=' . $child->getId() . '">' . $child->getTitle() .'</a>';
|
||||
echo '<button class="svg action" id="feeds_delete" onClick="(News.Feed.delete(' . $child->getId(). '))" title="' . $l->t('Delete feed') . '"></button>';
|
||||
echo '<button class="svg action" id="feeds_edit" title="' . $l->t('Edit feed') . '"></button>';
|
||||
echo '</li>';
|
||||
}
|
||||
else {
|
||||
//TODO:handle error in this case
|
||||
}
|
||||
}
|
||||
echo '</ul></li></ul>';
|
||||
}
|
||||
|
||||
print_folder($_['allfeeds'], 0);
|
||||
?>
|
|
@ -1,12 +0,0 @@
|
|||
<?php
|
||||
function print_folder(OC_News_Folder $folder, $depth){
|
||||
echo '<li class="menuItem" onclick="News.DropDownMenu.selectItem(this, ' . $folder->getId() . ')">' . strtoupper($folder->getName()) . '</li>';
|
||||
$children = $folder->getChildren();
|
||||
foreach($children as $child) {
|
||||
if ($child instanceOf OC_News_Folder){
|
||||
print_folder($child, $depth+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
print_folder($_['allfeeds'], 0);
|
||||
?>
|
|
@ -1,23 +0,0 @@
|
|||
<?php
|
||||
|
||||
$feedid = isset($_['feedid']) ? $_['feedid'] : '';
|
||||
|
||||
$itemmapper = new OC_News_ItemMapper();
|
||||
|
||||
$items = $itemmapper->findAll($feedid);
|
||||
|
||||
echo '<ul class="accordion">';
|
||||
foreach($items as $item) {
|
||||
$title = $item->getTitle();
|
||||
echo '<li>';
|
||||
echo '<div data-id="' . $item->getId() . '"';
|
||||
if ($item->isRead()) {
|
||||
echo ' class="title_read">';
|
||||
}
|
||||
else {
|
||||
echo ' class="title_unread" onClick="News.Feed.markItem(' . $item->getId() . ')">';
|
||||
}
|
||||
echo $title . '</div><div class="body">' . $item->getBody() . '</div>';
|
||||
echo '</li>';
|
||||
}
|
||||
echo '</ul>';
|
|
@ -1,3 +0,0 @@
|
|||
<div id="firstrun">
|
||||
<?php echo $l->t('You have no feeds in your reader.') ?>
|
||||
</div>
|
|
@ -1,8 +0,0 @@
|
|||
<form id="news">
|
||||
<fieldset class="personalblock">
|
||||
<strong>News</strong><br />
|
||||
<input type="text" name="opml_file" id="opml_file" placeholder="<?php echo $l->t('.opml file');?>" />
|
||||
<br />
|
||||
|
||||
</fieldset>
|
||||
</form>
|
|
@ -1,85 +0,0 @@
|
|||
<?php
|
||||
|
||||
$feedmapper = new OC_News_FeedMapper();
|
||||
$foldermapper = new OC_News_FolderMapper();
|
||||
$itemmapper = new OC_News_ItemMapper();
|
||||
|
||||
$folder = new OC_News_Folder( 'Friends' );
|
||||
$folderid = $foldermapper->save($folder);
|
||||
|
||||
$feed = OC_News_Utils::fetch( 'http://www.dabacon.org/newpontiff/?feed=rss2' );
|
||||
|
||||
$feedmapper->save($feed, $folder->getId());
|
||||
|
||||
$feed = $feedmapper->findWithItems($feed->getId());
|
||||
echo '<br>' . $feed->getTitle() . '<br>';
|
||||
$items = $feed->getItems();
|
||||
|
||||
foreach($items as $item) {
|
||||
|
||||
echo $item->getTitle() . ' - ';
|
||||
if ($item->isRead()) {
|
||||
echo $l->t('Read');
|
||||
}
|
||||
else {
|
||||
echo $l->t('Unread');
|
||||
}
|
||||
echo ' - ';
|
||||
if ($item->isImportant()) {
|
||||
echo $l->t('Important');
|
||||
}
|
||||
else {
|
||||
echo $l->t('Not important');
|
||||
}
|
||||
echo '<br>';
|
||||
$item->setImportant();
|
||||
}
|
||||
|
||||
echo '<br>...after changing status';
|
||||
echo '<br>' . $feed->getTitle() . '<br>';
|
||||
|
||||
foreach($items as $item) {
|
||||
echo $item->getTitle() . ' - ';
|
||||
if ($item->isRead()) {
|
||||
echo $l->t('Read');
|
||||
}
|
||||
else {
|
||||
echo $l->t('Unread');
|
||||
}
|
||||
echo ' - ';
|
||||
if ($item->isImportant()) {
|
||||
echo $l->t('Important');
|
||||
}
|
||||
else {
|
||||
echo $l->t('Not important');
|
||||
}
|
||||
echo '<br>';
|
||||
$item->setUnimportant();
|
||||
}
|
||||
|
||||
$feedmapper->save($feed, $folder->getId());
|
||||
|
||||
echo '<br>...after saving and reloading';
|
||||
|
||||
$feed = $feedmapper->findWithItems($feed->getId());
|
||||
echo '<br>' . $feed->getTitle() . '<br>';
|
||||
$items = $feed->getItems();
|
||||
|
||||
foreach($items as &$item) {
|
||||
|
||||
echo $item->getTitle() . ' - ';
|
||||
if ($item->isRead()) {
|
||||
echo $l->t('Read');
|
||||
}
|
||||
else {
|
||||
echo $l->t('Unread');
|
||||
}
|
||||
echo ' - ';
|
||||
if ($item->isImportant()) {
|
||||
echo $l->t('Important');
|
||||
}
|
||||
else {
|
||||
echo $l->t('Not important');
|
||||
}
|
||||
echo '<br>';
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
#
|
||||
# @package shorty an ownCloud url shortener plugin
|
||||
# @category internet
|
||||
# @author Christian Reiner
|
||||
# @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
# @license GNU Affero General Public license (AGPL)
|
||||
# @link information
|
||||
# @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 3 of the license, or any later version.
|
||||
#
|
||||
# This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public
|
||||
# License along with this library.
|
||||
# If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# @file .htaccess
|
||||
# These rules try to detect any requests that carry a "shorty id" and map them to forward.php?<shorty id>
|
||||
# That way you can use shorter (or more simple) urls to publish or relay links
|
||||
# @author Christian Reiner
|
||||
|
||||
RewriteEngine On
|
||||
|
||||
# example: http://.../apps/shorty/index.php/0123456789
|
||||
RewriteRule index\.php/([a-z0-9]{4,12})$ ../../public.php?service=shorty_relay&id=$1 [NC,L]
|
||||
|
||||
# example: http://.../apps/shorty/index.php?0123456789
|
||||
RewriteCond %{QUERY_STRING} ^([a-z0-9]{4,12})$ [NC]
|
||||
RewriteRule index\.php ../../public.php?service=shorty_relay&id=%{QUERY_STRING} [L]
|
||||
|
||||
# example: http://.../apps/shorty/?0123456789
|
||||
RewriteCond %{QUERY_STRING} ^([a-z0-9]{4,12})$ [NC]
|
||||
RewriteCond %{REQUEST_URI} meta/.+\.php
|
||||
RewriteRule - ../../public.php?service=shorty_relay&id=%{QUERY_STRING} [L]
|
||||
|
||||
# example: http://.../apps/shorty/0123456789
|
||||
RewriteRule ^([a-z0-9]{4,12})$ ../../public.php?service=shorty_relay&id=$1 [NC,L]
|
|
@ -1 +0,0 @@
|
|||
(function(b){var o=!1,d=null,u=parseFloat,j=String.fromCharCode,q=Math.min,l=/(\d+\.?\d*)$/g,g,a=[],h,m,t=9472,f={},c;for(var p=32,k=j(p),r=255;p<r;p++,k=j(p).toLowerCase()){if(!~a.indexOf(k)){a.push(k)}}a.sort();b.tinysort={id:"TinySort",version:"1.3.20",copyright:"Copyright (c) 2008-2012 Ron Valstar",uri:"http://tinysort.sjeiti.com/",licenced:{MIT:"http://www.opensource.org/licenses/mit-license.php",GPL:"http://www.gnu.org/licenses/gpl.html"},defaults:{order:"asc",attr:d,data:d,useVal:o,place:"start",returns:o,cases:o,forceStrings:o,sortFunction:d,charOrder:g}};b.fn.extend({tinysort:function(V,L){if(V&&typeof(V)!="string"){L=V;V=d}var T=b.extend({},b.tinysort.defaults,L),v,Q=this,z=b(this).length,ae={},W=!(!V||V==""),H=!(T.attr===d||T.attr==""),ah=T.data!==d,J=W&&V[0]==":",C=J?Q.filter(V):Q,F=T.sortFunction,s=T.order=="asc"?1:-1,P=[];if(T.charOrder!=g){g=T.charOrder;if(!T.charOrder){m=false;t=9472;f={};c=h=d}else{h=a.slice(0);m=false;for(var S=[],B=function(i,ai){S.push(ai);f[T.cases?i:i.toLowerCase()]=ai},N="",X="z",aa=g.length,ac,Z,ad=0;ad<aa;ad++){var x=g[ad],ab=x.charCodeAt(),I=ab>96&&ab<123;if(!I){if(x=="["){var D=S.length,M=D?S[D-1]:X,w=g.substr(ad+1).match(/[^\]]*/)[0],R=w.match(/{[^}]*}/g);if(R){for(ac=0,Z=R.length;ac<Z;ac++){var O=R[ac];ad+=O.length;w=w.replace(O,"");B(O.replace(/[{}]/g,""),M);m=true}}for(ac=0,Z=w.length;ac<Z;ac++){B(M,w[ac])}ad+=w.length+1}else{if(x=="{"){var G=g.substr(ad+1).match(/[^}]*/)[0];B(G,j(t++));ad+=G.length+1;m=true}else{S.push(x)}}}if(S.length&&(I||ad===aa-1)){var E=S.join("");N+=E;b.each(E,function(i,ai){h.splice(h.indexOf(ai),1)});var A=S.slice(0);A.splice(0,0,h.indexOf(X)+1,0);Array.prototype.splice.apply(h,A);S.length=0}if(ad+1===aa){c=new RegExp("["+N+"]","gi")}else{if(I){X=x}}}}}if(!F){F=T.order=="rand"?function(){return Math.random()<0.5?1:-1}:function(av,at){var au=o,am=!T.cases?n(av.s):av.s,ak=!T.cases?n(at.s):at.s;if(!T.forceStrings){var aj=am&&am.match(l),aw=ak&&ak.match(l);if(aj&&aw){var ar=am.substr(0,am.length-aj[0].length),aq=ak.substr(0,ak.length-aw[0].length);if(ar==aq){au=!o;am=u(aj[0]);ak=u(aw[0])}}}var ai=s*(am<ak?-1:(am>ak?1:0));if(!au&&T.charOrder){if(m){for(var ax in f){var al=f[ax];am=am.replace(ax,al);ak=ak.replace(ax,al)}}if(am.match(c)!==d||ak.match(c)!==d){for(var ap=0,ao=q(am.length,ak.length);ap<ao;ap++){var an=h.indexOf(am[ap]),i=h.indexOf(ak[ap]);if(ai=s*(an<i?-1:(an>i?1:0))){break}}}}return ai}}Q.each(function(ak,al){var am=b(al),ai=W?(J?C.filter(al):am.find(V)):am,an=ah?ai.data(T.data):(H?ai.attr(T.attr):(T.useVal?ai.val():ai.text())),aj=am.parent();if(!ae[aj]){ae[aj]={s:[],n:[]}}if(ai.length>0){ae[aj].s.push({s:an,e:am,n:ak})}else{ae[aj].n.push({e:am,n:ak})}});for(v in ae){ae[v].s.sort(F)}for(v in ae){var ag=ae[v],K=[],Y=z,af=[0,0],ad;switch(T.place){case"first":b.each(ag.s,function(ai,aj){Y=q(Y,aj.n)});break;case"org":b.each(ag.s,function(ai,aj){K.push(aj.n)});break;case"end":Y=ag.n.length;break;default:Y=0}for(ad=0;ad<z;ad++){var y=e(K,ad)?!o:ad>=Y&&ad<Y+ag.s.length,U=(y?ag.s:ag.n)[af[y?0:1]].e;U.parent().append(U);if(y||!T.returns){P.push(U.get(0))}af[y?0:1]++}}Q.length=0;Array.prototype.push.apply(Q,P);return Q}});function n(i){return i&&i.toLowerCase?i.toLowerCase():i}function e(v,x){for(var w=0,s=v.length;w<s;w++){if(v[w]==x){return !o}}return o}b.fn.TinySort=b.fn.Tinysort=b.fn.tsort=b.fn.tinysort})(jQuery);
|
|
@ -1,101 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU AFFERO GENERAL PUBLIC LICENSE (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ajax/add.php
|
||||
* @brief Ajax method to add a new shorty defined by request arguments
|
||||
* @param title (string) Human readable title of the shorty
|
||||
* @param target (url) Remote target url meant to be shortened
|
||||
* @param until (date) Date until when the created shorty is valid and usable
|
||||
* @param notes (string) Any additional information in text form
|
||||
* @param favicon (url) Reference to the shortcut icon used in target url
|
||||
* @returns (json) success/error state indicator
|
||||
* @returns (json) Associative array of attributes of the generated shorty
|
||||
* @returns (json) Human readable message
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( TRUE );
|
||||
|
||||
//no apps or filesystem
|
||||
$RUNTIME_NOSETUPFS = true;
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn ( );
|
||||
OCP\JSON::checkAppEnabled ( 'shorty' );
|
||||
|
||||
try
|
||||
{
|
||||
$p_id = OC_Shorty_Tools::shorty_id ( );
|
||||
$p_status = OC_Shorty_Type::req_argument ( 'status', OC_Shorty_Type::STATUS, FALSE );
|
||||
$p_title = OC_Shorty_Type::req_argument ( 'title', OC_Shorty_Type::STRING, FALSE );
|
||||
$p_target = OC_Shorty_Type::req_argument ( 'target', OC_Shorty_Type::URL, TRUE );
|
||||
$p_until = OC_Shorty_Type::req_argument ( 'until', OC_Shorty_Type::DATE, FALSE );
|
||||
$p_notes = OC_Shorty_Type::req_argument ( 'notes', OC_Shorty_Type::STRING, FALSE );
|
||||
$p_favicon = OC_Shorty_Type::req_argument ( 'favicon', OC_Shorty_Type::URL, FALSE );
|
||||
// register shorty at backend
|
||||
$p_source = OC_Shorty_Backend::registerUrl ( $p_id );
|
||||
// fallback title: choose hostname if no title is specified
|
||||
$p_title = $p_title ? trim($p_title) : parse_url($p_target,PHP_URL_HOST);
|
||||
// insert new shorty into our database
|
||||
$param = array
|
||||
(
|
||||
':user' => OCP\User::getUser(),
|
||||
':id' => $p_id,
|
||||
':status' => $p_status ? $p_status : '',
|
||||
':title' => $p_title ? $p_title : '',
|
||||
':favicon' => $p_favicon ? $p_favicon : '',
|
||||
':source' => $p_source ? $p_source : '',
|
||||
':target' => $p_target ? $p_target : '',
|
||||
':notes' => $p_notes ? $p_notes : '',
|
||||
':until' => $p_until,
|
||||
);
|
||||
$query = OCP\DB::prepare ( OC_Shorty_Query::URL_INSERT );
|
||||
$query->execute ( $param );
|
||||
|
||||
// read new entry for feedback
|
||||
$param = array
|
||||
(
|
||||
':user' => OCP\User::getUser(),
|
||||
':id' => $p_id,
|
||||
);
|
||||
$query = OCP\DB::prepare ( OC_Shorty_Query::URL_VERIFY );
|
||||
$entries = $query->execute($param)->FetchAll();
|
||||
if ( (1==count($entries))
|
||||
&&(isset($entries[0]['id']))
|
||||
&&($p_id==$entries[0]['id']) )
|
||||
$entries[0]['relay']=OC_Shorty_Tools::relayUrl ( $entries[0]['id'] );
|
||||
else
|
||||
throw new OC_Shorty_Exception ( "failed to verify stored shorty with id '%1s'", array($p_id) );
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( FALSE );
|
||||
OCP\Util::writeLog( 'shorty', sprintf("Url shortened to: %s",$p_source), OC_Log::INFO );
|
||||
OCP\JSON::success ( array ( 'data' => $entries[0],
|
||||
'message' => OC_Shorty_L10n::t("Url shortened to: %s",$p_source) ) );
|
||||
} catch ( Exception $e ) { OC_Shorty_Exception::JSONerror($e); }
|
||||
?>
|
|
@ -1,67 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ajax/click.php
|
||||
* @brief Ajax method to register a 'click', a single hit on an existing and valid shorty
|
||||
* @param id (string) Internal id of a referenced shorty
|
||||
* @returns (json) success/error state indicator
|
||||
* @returns (json) Associative array holding the id of the shorty whose click was registered
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( TRUE );
|
||||
|
||||
//no apps or filesystem
|
||||
$RUNTIME_NOSETUPFS = true;
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn ( );
|
||||
OCP\JSON::checkAppEnabled ( 'shorty' );
|
||||
|
||||
try
|
||||
{
|
||||
if (isset($_GET['id']))
|
||||
{
|
||||
$p_id = OC_Shorty_Type::req_argument ( $_GET['id'], OC_Shorty_Type::ID, TRUE );
|
||||
$param = array
|
||||
(
|
||||
'user' => OCP\User::getUser(),
|
||||
'id' => $p_id,
|
||||
);
|
||||
$query = OCP\DB::prepare ( OC_Shorty_Query::URL_CLICK );
|
||||
$query->execute ( $param );
|
||||
OCP\JSON::success ( array ( 'data' => array('id'=>$p_id),
|
||||
'message' => OC_Shorty_L10n::t('Click registered') ) );
|
||||
}
|
||||
else
|
||||
throw new OC_Shorty_Exception ( "request failed: missing mandatory argument 'id'" );
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( FALSE );
|
||||
} catch ( Exception $e ) { OC_Shorty_Exception::JSONerror($e); }
|
||||
?>
|
|
@ -1,54 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ajax/count.php
|
||||
* @brief Ajax method to retrieve a list of important sums, counts of the existing set of shortys
|
||||
* @returns (json) success/error state indicator
|
||||
* @returns (json) Associative array of counts
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( TRUE );
|
||||
|
||||
//no apps or filesystem
|
||||
$RUNTIME_NOSETUPFS = TRUE;
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn ( );
|
||||
OCP\JSON::checkAppEnabled ( 'shorty' );
|
||||
|
||||
try
|
||||
{
|
||||
$countResult = OC_Shorty_Tools::countShorties ( );
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( FALSE );
|
||||
OCP\JSON::success ( array ( 'data' => $countResult,
|
||||
'message' => OC_Shorty_L10n::t('Counted entries and clicks') ) );
|
||||
} catch ( Exception $e ) { OC_Shorty_Exception::JSONerror($e); }
|
||||
?>
|
|
@ -1,63 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ajax/del.php
|
||||
* @brief Ajax method to delete an existing shorty
|
||||
* @param id (string) Internal id of a referenced shorty
|
||||
* @returns (json) success/error state indicator
|
||||
* @returns (json) Key of shorty that was deleted
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( TRUE );
|
||||
|
||||
//no apps or filesystem
|
||||
$RUNTIME_NOSETUPFS = true;
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn ( );
|
||||
OCP\JSON::checkAppEnabled ( 'shorty' );
|
||||
|
||||
try
|
||||
{
|
||||
$p_id = OC_Shorty_Type::req_argument ( 'id', OC_Shorty_Type::ID, TRUE );
|
||||
$param = array
|
||||
(
|
||||
'user' => OCP\User::getUser(),
|
||||
'id' => $p_id,
|
||||
);
|
||||
$query = OCP\DB::prepare ( OC_Shorty_Query::URL_DELETE );
|
||||
$query->execute($param);
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( FALSE );
|
||||
OCP\Util::writeLog( 'shorty', sprintf("Shorty with id '%s' deleted",$p_id), OC_Log::INFO );
|
||||
OCP\JSON::success ( array ( 'data' => array('id'=>$p_id),
|
||||
'message' => OC_Shorty_L10n::t("Shorty with id '%s' deleted",$p_id) ) );
|
||||
} catch ( Exception $e ) { OC_Shorty_Exception::JSONerror($e); }
|
||||
?>
|
|
@ -1,88 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ajax/edit.php
|
||||
* @brief Ajax method to modify aspects of an existing shorty
|
||||
* @param id (string) Internal id of the referenced shorty
|
||||
* @param title (string) Human readable title
|
||||
* @param notes (string) Any additional information in free text form
|
||||
* @returns (json) success/error state indicator
|
||||
* @returns (json) Associative array holding the id of the shorty whose click was registered
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( TRUE );
|
||||
|
||||
//no apps or filesystem
|
||||
$RUNTIME_NOSETUPFS = true;
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn ( );
|
||||
OCP\JSON::checkAppEnabled ( 'shorty' );
|
||||
|
||||
try
|
||||
{
|
||||
$p_id = OC_Shorty_Type::req_argument ( 'id', OC_Shorty_Type::ID, TRUE );
|
||||
$p_status = OC_Shorty_Type::req_argument ( 'status', OC_Shorty_Type::STATUS, FALSE );
|
||||
$p_title = OC_Shorty_Type::req_argument ( 'title', OC_Shorty_Type::STRING, FALSE );
|
||||
$p_until = OC_Shorty_Type::req_argument ( 'until', OC_Shorty_Type::DATE, FALSE );
|
||||
$p_notes = OC_Shorty_Type::req_argument ( 'notes', OC_Shorty_Type::STRING, FALSE );
|
||||
$param = array
|
||||
(
|
||||
':user' => OCP\User::getUser ( ),
|
||||
':id' => $p_id,
|
||||
':status'=> $p_status ? $p_status : '',
|
||||
':title' => $p_title ? $p_title : '',
|
||||
':notes' => $p_notes ? $p_notes : '',
|
||||
':until' => $p_until,
|
||||
);
|
||||
$query = OCP\DB::prepare ( OC_Shorty_Query::URL_UPDATE );
|
||||
$query->execute ( $param );
|
||||
|
||||
// read new entry for feedback
|
||||
$param = array
|
||||
(
|
||||
'user' => OCP\User::getUser(),
|
||||
'id' => $p_id,
|
||||
);
|
||||
$query = OCP\DB::prepare ( OC_Shorty_Query::URL_VERIFY );
|
||||
$entries = $query->execute($param)->FetchAll();
|
||||
if ( (1==count($entries))
|
||||
&&(isset($entries[0]['id']))
|
||||
&&($p_id==$entries[0]['id']) )
|
||||
$entries[0]['relay']=OC_Shorty_Tools::relayUrl ( $entries[0]['id'] );
|
||||
else
|
||||
throw new OC_Shorty_Exception ( "failed to verify stored shorty with id '%1s'", array($p_id) );
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( FALSE );
|
||||
OCP\Util::writeLog( 'shorty', sprintf("Modifications for shorty with id '%s' saved",$p_id), OC_Log::INFO );
|
||||
OCP\JSON::success ( array ( 'data' => $entries[0],
|
||||
'message' => OC_Shorty_L10n::t("Modifications for shorty with id '%s' saved",$p_id) ) );
|
||||
} catch ( Exception $e ) { OC_Shorty_Exception::JSONerror($e); }
|
||||
?>
|
|
@ -1,77 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ajax/list.php
|
||||
* @brief Ajax method to retrieve a list of existing shortys
|
||||
* @returns (json) success/error state indicator
|
||||
* @returns (number) Total number of shortys in the list
|
||||
* @returns (json) Numeric array of all shortys, associative array of attributes as values for every single shorty contained
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( TRUE );
|
||||
|
||||
//no apps or filesystem
|
||||
$RUNTIME_NOSETUPFS = TRUE;
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn ( );
|
||||
OCP\JSON::checkAppEnabled ( 'shorty' );
|
||||
|
||||
try
|
||||
{
|
||||
// first remove any entries already marked as 'deleted'
|
||||
$query = OCP\DB::prepare ( OC_Shorty_Query::URL_REMOVE );
|
||||
$result = $query->execute(array(':user'=>OCP\User::getUser()));
|
||||
// now comes the real list selection
|
||||
// define ('PAGE_SIZE', 100);
|
||||
// $p_offset = OC_Shorty_Type::req_argument ( 'page', OC_Shorty_Type::INTEGER, FALSE) * PAGE_SIZE;
|
||||
// pre-sort list according to user preferences
|
||||
$p_sort = OC_Shorty_Type::$SORTING[OCP\Config::getUserValue(OCP\User::getUser(),'shorty','list-sort-code','cd')];
|
||||
$param = array
|
||||
(
|
||||
':user' => OCP\User::getUser ( ),
|
||||
':sort' => $p_sort,
|
||||
// ':offset' => $p_offset,
|
||||
// ':limit' => PAGE_SIZE,
|
||||
);
|
||||
$query = OCP\DB::prepare ( OC_Shorty_Query::URL_LIST );
|
||||
$result = $query->execute($param);
|
||||
$reply = $result->fetchAll();
|
||||
// enhance all entries with the relay url
|
||||
foreach (array_keys($reply) as $key)
|
||||
if (isset($reply[$key]['id']))
|
||||
$reply[$key]['relay']=OC_Shorty_Tools::relayUrl ( $reply[$key]['id'] );
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( FALSE );
|
||||
OCP\JSON::success ( array ( 'data' => $reply,
|
||||
'count' => sizeof($reply),
|
||||
'message' => OC_Shorty_L10n::t('Number of entries: %s', count($reply)) ) );
|
||||
} catch ( Exception $e ) { OC_Shorty_Exception::JSONerror($e); }
|
||||
?>
|
|
@ -1,56 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ajax/meta.php
|
||||
* @brief Ajax method to query meta information about a given remote url
|
||||
* @param target (string) Url of a remote web resource
|
||||
* @returns (json) success/error state indicator
|
||||
* @returns (array) Associative array of meta data aspects
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( TRUE );
|
||||
|
||||
//no apps or filesystem
|
||||
$RUNTIME_NOSETUPFS = true;
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn ( );
|
||||
OCP\JSON::checkAppEnabled ( 'shorty' );
|
||||
|
||||
try
|
||||
{
|
||||
$target = OC_Shorty_Type::req_argument ( 'target', OC_Shorty_Type::URL, TRUE );
|
||||
$meta = OC_Shorty_Meta::fetchMetaData(htmlspecialchars_decode($target));
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( FALSE );
|
||||
OCP\JSON::success ( array ( 'data' => $meta,
|
||||
'message' => OC_Shorty_L10n::t("Target url '%s' is valid", $meta['target']) ) );
|
||||
} catch ( Exception $e ) { OC_Shorty_Exception::JSONerror($e); }
|
||||
?>
|
|
@ -1,119 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ajax/preferences.php
|
||||
* @brief Ajax method to store one or more personal preferences
|
||||
* @param backend-type (string) Identifier of chosen backend type
|
||||
* @param backend-static-base (string) Url to use as a base when the static backend is active
|
||||
* @param backend-google-key (string) Personal authentication key to use when the google backend is active
|
||||
* @param backend-bitly-key (string) Personal authentication key to use when the bit.li backend is active
|
||||
* @param backend-bitly-user (string) Personal authentication user to use when the bit.li backend is active
|
||||
* @param sms-control (string) Controls wether a 'send as sms' action should be offered is the sharing dialog
|
||||
* @param list-sort-code (string) Two character sorting key controlling the active sorting of shorty lists
|
||||
* @returns (json) success/error state indicator
|
||||
* @returns (json) Associative array holding the stored values by their key
|
||||
* @returns (json) Human readable message describing the result
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( TRUE );
|
||||
|
||||
//no apps or filesystem
|
||||
$RUNTIME_NOSETUPFS = true;
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn ( );
|
||||
OCP\JSON::checkAppEnabled ( 'shorty' );
|
||||
|
||||
try
|
||||
{
|
||||
$data = array();
|
||||
switch ( $_SERVER['REQUEST_METHOD'] )
|
||||
{
|
||||
case 'POST':
|
||||
// detect provided preferences
|
||||
$data = array();
|
||||
foreach (array_keys($_POST) as $key)
|
||||
if ( isset(OC_Shorty_Type::$PREFERENCE[$key]) ) // ignore unknown preference keys
|
||||
{
|
||||
$type = OC_Shorty_Type::$PREFERENCE[$key];
|
||||
$data[$key] = OC_Shorty_Type::req_argument ( $key, $type, FALSE );
|
||||
}
|
||||
// eliminate settings not explicitly set
|
||||
$data = array_diff ( $data, array(FALSE) );
|
||||
// store settings
|
||||
foreach ( $data as $key=>$val )
|
||||
OCP\Config::setUserValue( OCP\User::getUser(), 'shorty', $key, $val );
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( FALSE );
|
||||
OCP\Util::writeLog( 'shorty', sprintf("Preference(s) '%s' saved.",implode(',',array_keys($data))), OC_Log::INFO );
|
||||
OCP\JSON::success ( array ( 'data' => $data,
|
||||
'message' => OC_Shorty_L10n::t("Preference(s) '%s' saved.",implode(',',array_keys($data))) ) );
|
||||
break;
|
||||
case 'GET':
|
||||
// detect requested preferences
|
||||
foreach (array_keys($_GET) as $key)
|
||||
{
|
||||
if ( isset(OC_Shorty_Type::$PREFERENCE[$key]) ) // ignore unknown preference keys
|
||||
{
|
||||
$type = OC_Shorty_Type::$PREFERENCE[$key];
|
||||
$data[$key] = OCP\Config::getUserValue( OCP\User::getUser(), 'shorty', $key);
|
||||
// morph value into an explicit type
|
||||
switch ($type)
|
||||
{
|
||||
case OC_Shorty_Type::ID:
|
||||
case OC_Shorty_Type::STATUS:
|
||||
case OC_Shorty_Type::SORTKEY:
|
||||
case OC_Shorty_Type::SORTVAL:
|
||||
case OC_Shorty_Type::STRING:
|
||||
case OC_Shorty_Type::URL:
|
||||
case OC_Shorty_Type::DATE:
|
||||
settype ( $data[$key], 'string' );
|
||||
break;
|
||||
case OC_Shorty_Type::INTEGER:
|
||||
case OC_Shorty_Type::TIMESTAMP:
|
||||
settype ( $data[$key], 'integer' );
|
||||
break;
|
||||
case OC_Shorty_Type::FLOAT:
|
||||
settype ( $data[$key], 'float' );
|
||||
break;
|
||||
default:
|
||||
} // switch
|
||||
}
|
||||
} // foreach
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( FALSE );
|
||||
OCP\Util::writeLog( 'shorty', sprintf("Preference(s) '%s' saved.",implode(',',array_keys($data))), OC_Log::INFO );
|
||||
OCP\JSON::success ( array ( 'data' => $data,
|
||||
'message' => OC_Shorty_L10n::t('Preference(s) retrieved.') ) );
|
||||
break;
|
||||
default:
|
||||
throw new OC_Shorty_Exception ( "unexpected request method '%s'", $_SERVER['REQUEST_METHOD'] );
|
||||
} // switch
|
||||
} catch ( Exception $e ) { OC_Shorty_Exception::JSONerror($e); }
|
||||
?>
|
|
@ -1,109 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ajax/settings.php
|
||||
* @brief Ajax method to store one or more system settings (plugin settings)
|
||||
* @param backend-static-base (string) Url to use as a base when the static backend is active (plugins default, may be overridden by user preference)
|
||||
* @returns (json) success/error state indicator
|
||||
* @returns (json) Associative array holding the stored values by their key
|
||||
* @returns (json) Human readable message describing the result
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( TRUE );
|
||||
|
||||
//no apps or filesystem
|
||||
$RUNTIME_NOSETUPFS = true;
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkAdminUser ( );
|
||||
OCP\JSON::checkAppEnabled ( 'shorty' );
|
||||
|
||||
try
|
||||
{
|
||||
$data = array();
|
||||
switch ( $_SERVER['REQUEST_METHOD'] )
|
||||
{
|
||||
case 'POST':
|
||||
// detect provided settings
|
||||
$data = array();
|
||||
foreach (array_keys($_POST) as $key)
|
||||
if ( isset(OC_Shorty_Type::$SETTING[$key]) ) // ignore unknown preference keys
|
||||
{
|
||||
$type = OC_Shorty_Type::$SETTING[$key];
|
||||
$data[$key] = OC_Shorty_Type::req_argument ( $key, $type, FALSE );
|
||||
}
|
||||
// eliminate settings not explicitly set
|
||||
$data = array_diff ( $data, array(FALSE) );
|
||||
// store settings one by one
|
||||
foreach ( $data as $key=>$val )
|
||||
OCP\Config::setAppValue( 'shorty', $key, $val );
|
||||
break;
|
||||
case 'GET':
|
||||
// detect requested settings
|
||||
foreach (array_keys($_GET) as $key)
|
||||
{
|
||||
if ( isset(OC_Shorty_Type::$SETTING[$key]) ) // ignore unknown preference keys
|
||||
{
|
||||
$type = OC_Shorty_Type::$SETTING[$key];
|
||||
$data[$key] = OCP\Config::getUserValue( OCP\User::getUser(), 'shorty', $key);
|
||||
// morph value into an explicit type
|
||||
switch ($type)
|
||||
{
|
||||
case OC_Shorty_Type::ID:
|
||||
case OC_Shorty_Type::STATUS:
|
||||
case OC_Shorty_Type::SORTKEY:
|
||||
case OC_Shorty_Type::SORTVAL:
|
||||
case OC_Shorty_Type::STRING:
|
||||
case OC_Shorty_Type::URL:
|
||||
case OC_Shorty_Type::DATE:
|
||||
settype ( $data[$key], 'string' );
|
||||
break;
|
||||
case OC_Shorty_Type::INTEGER:
|
||||
case OC_Shorty_Type::TIMESTAMP:
|
||||
settype ( $data[$key], 'integer' );
|
||||
break;
|
||||
case OC_Shorty_Type::FLOAT:
|
||||
settype ( $data[$key], 'float' );
|
||||
break;
|
||||
default:
|
||||
} // switch
|
||||
}
|
||||
} // foreach
|
||||
break;
|
||||
default:
|
||||
throw new OC_Shorty_Exception ( "unexpected request method '%s'", $_SERVER['REQUEST_METHOD'] );
|
||||
} // switch
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( FALSE );
|
||||
OCP\Util::writeLog( 'shorty', sprintf("Setting(s) '%s' saved.",implode(',',array_keys($data))), OC_Log::INFO );
|
||||
OCP\JSON::success ( array ( 'data' => $data,
|
||||
'message' => OC_Shorty_L10n::t('Setting saved.') ) );
|
||||
} catch ( Exception $e ) { OC_Shorty_Exception::JSONerror($e); }
|
||||
?>
|
|
@ -1,67 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ajax/status.php
|
||||
* @brief Ajax method to modify the status of an existing shorty
|
||||
* @param id (string) Internal id of the referenced shorty
|
||||
* @param title (string) Human readable title
|
||||
* @param notes (string) Any additional information in free text form
|
||||
* @returns (json) success/error state indicator
|
||||
* @returns (json) Associative array holding the id of the shorty whose click was registered
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( TRUE );
|
||||
|
||||
//no apps or filesystem
|
||||
$RUNTIME_NOSETUPFS = true;
|
||||
|
||||
// Check if we are a user
|
||||
OCP\JSON::checkLoggedIn ( );
|
||||
OCP\JSON::checkAppEnabled ( 'shorty' );
|
||||
|
||||
try
|
||||
{
|
||||
$p_id = OC_Shorty_Type::req_argument ( 'id', OC_Shorty_Type::ID, TRUE );
|
||||
$p_status = OC_Shorty_Type::req_argument ( 'status', OC_Shorty_Type::STATUS, FALSE );
|
||||
$param = array
|
||||
(
|
||||
'user' => OCP\User::getUser ( ),
|
||||
'id' => $p_id,
|
||||
'status' => $p_status,
|
||||
);
|
||||
$query = OCP\DB::prepare ( OC_Shorty_Query::URL_STATUS );
|
||||
$query->execute ( $param );
|
||||
|
||||
// swallow any accidential output generated by php notices and stuff to preserve a clean JSON reply structure
|
||||
OC_Shorty_Tools::ob_control ( FALSE );
|
||||
OCP\Util::writeLog( 'shorty', sprintf("Status change for shorty with id '%s' saved",$p_id), OC_Log::INFO );
|
||||
OCP\JSON::success ( array ( 'data' => array('id'=>$p_id),
|
||||
'message' => sprintf(OC_Shorty_L10n::t("Status change for shorty with id '%s' saved"),$p_id) ) );
|
||||
} catch ( Exception $e ) { OC_Shorty_Exception::JSONerror($e); }
|
||||
?>
|
|
@ -1,53 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file appinfo/app.php
|
||||
* @brief Basic registration of plugin at ownCloud
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
OC::$CLASSPATH['OC_Shorty_Backend'] = 'apps/shorty/lib/backend.php';
|
||||
OC::$CLASSPATH['OC_Shorty_Exception'] = 'apps/shorty/lib/exception.php';
|
||||
OC::$CLASSPATH['OC_Shorty_HttpException'] = 'apps/shorty/lib/exception.php';
|
||||
OC::$CLASSPATH['OC_Shorty_L10n'] = 'apps/shorty/lib/l10n.php';
|
||||
OC::$CLASSPATH['OC_Shorty_Meta'] = 'apps/shorty/lib/meta.php';
|
||||
OC::$CLASSPATH['OC_Shorty_Query'] = 'apps/shorty/lib/query.php';
|
||||
OC::$CLASSPATH['OC_Shorty_Tools'] = 'apps/shorty/lib/tools.php';
|
||||
OC::$CLASSPATH['OC_Shorty_Type'] = 'apps/shorty/lib/type.php';
|
||||
|
||||
OCP\App::addNavigationEntry ( array ( 'id' => 'shorty_index',
|
||||
'order' => 71,
|
||||
'href' => OCP\Util::linkTo ( 'shorty', 'index.php' ),
|
||||
'icon' => OCP\Util::imagePath( 'shorty', 'shorty.svg' ),
|
||||
'name' => 'Shorty' ) );
|
||||
|
||||
OCP\App::register ( array ( 'order' => 71, 'id' => 'shorty', 'name' => 'Shorty' ) );
|
||||
OCP\App::registerAdmin ( 'shorty', 'settings' );
|
||||
OCP\App::registerPersonal ( 'shorty', 'preferences' );
|
||||
OCP\Util::connectHook ( 'OC_User', 'post_deleteUser', 'OC_Shorty_Hooks', 'deleteUser');
|
||||
|
||||
?>
|
|
@ -1,148 +0,0 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||
<!--
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
-->
|
||||
|
||||
<!--
|
||||
/**
|
||||
* @file appinfo/database.xml
|
||||
* @brief Database scheme definition for plugins tables
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
-->
|
||||
|
||||
<database>
|
||||
<name>*dbname*</name>
|
||||
<create>true</create>
|
||||
<overwrite>false</overwrite>
|
||||
<charset>latin1</charset>
|
||||
<table>
|
||||
<name>*dbprefix*shorty</name>
|
||||
<declaration>
|
||||
<field>
|
||||
<name>id</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>12</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>status</name>
|
||||
<type>text</type>
|
||||
<default>'shared'</default>
|
||||
<notnull>true</notnull>
|
||||
<length>10</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>title</name>
|
||||
<type>text</type>
|
||||
<default>''</default>
|
||||
<notnull>true</notnull>
|
||||
<length>80</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>favicon</name>
|
||||
<type>text</type>
|
||||
<default>''</default>
|
||||
<notnull>false</notnull>
|
||||
<length>1024</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>source</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>4096</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>target</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>4096</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>user</name>
|
||||
<type>text</type>
|
||||
<notnull>true</notnull>
|
||||
<length>64</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>until</name>
|
||||
<type>date</type>
|
||||
<notnull>false</notnull>
|
||||
<default></default>
|
||||
</field>
|
||||
<field>
|
||||
<name>created</name>
|
||||
<type>date</type>
|
||||
<notnull>false</notnull>
|
||||
<default></default>
|
||||
</field>
|
||||
<field>
|
||||
<name>accessed</name>
|
||||
<type>timestamp</type>
|
||||
<notnull>false</notnull>
|
||||
<default></default>
|
||||
</field>
|
||||
<field>
|
||||
<name>clicks</name>
|
||||
<type>integer</type>
|
||||
<default>0</default>
|
||||
<notnull>true</notnull>
|
||||
<unsigned>true</unsigned>
|
||||
<length>10</length>
|
||||
</field>
|
||||
<field>
|
||||
<name>notes</name>
|
||||
<type>text</type>
|
||||
<default>''</default>
|
||||
<notnull>true</notnull>
|
||||
<length>4096</length>
|
||||
</field>
|
||||
|
||||
<index>
|
||||
<name>shorty_id</name>
|
||||
<unique>true</unique>
|
||||
<field>
|
||||
<name>id</name>
|
||||
<sorting>descending</sorting>
|
||||
</field>
|
||||
</index>
|
||||
<index>
|
||||
<name>shorty_user</name>
|
||||
<unique>false</unique>
|
||||
<field>
|
||||
<name>user</name>
|
||||
<sorting>ascending</sorting>
|
||||
</field>
|
||||
</index>
|
||||
<index>
|
||||
<name>shorty_source</name>
|
||||
<unique>false</unique>
|
||||
<field>
|
||||
<name>source</name>
|
||||
<sorting>ascending</sorting>
|
||||
</field>
|
||||
</index>
|
||||
</declaration>
|
||||
</table>
|
||||
</database>
|
|
@ -1,56 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
-->
|
||||
|
||||
<!--
|
||||
/**
|
||||
* @file appinfo/info.xml
|
||||
* @brief Definition of central information about this plugin
|
||||
* @author Christian Reiner
|
||||
/*
|
||||
-->
|
||||
|
||||
<info>
|
||||
<id>shorty</id>
|
||||
<name>Shorty</name>
|
||||
<description>Shorty offers a service to store, manage and use a collection of short links
|
||||
pointing to ressources in the web. The features are a combination of a
|
||||
centralized bookmarks collection, an url shortener and an access control.
|
||||
The collection is presented as a link of "shorties", a shorty can be created
|
||||
either manually in the list ("New") or by using the "Shortlet". The Shortlet
|
||||
is something like a Booklet, a JS based bookmark meant to be stored inside the
|
||||
bookmark toolbar or area of a web browser. When clicked, the page currently
|
||||
open in the browser will be offered to be added to the list of existing shorties.
|
||||
For more information see: http://apps.owncloud.com/content/show.php/Shorty?content=150401
|
||||
Current version: 0.2.2 (06.06.2012)</description>
|
||||
<version>0.2.2</version>
|
||||
<licence>AGPL</licence>
|
||||
<author>Christian Reiner</author>
|
||||
<require>4</require>
|
||||
<public>
|
||||
<shorty_relay>relay.php</shorty_relay>
|
||||
<shorty_qrcode>qrcode.php</shorty_qrcode>
|
||||
</public>
|
||||
</info>
|
|
@ -1,101 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file appinfo/migrate.php
|
||||
* @brief OC migration support
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
class OC_Migration_Provider_Shorty extends OC_Migration_Provider
|
||||
{
|
||||
|
||||
function export ( )
|
||||
{
|
||||
OCP\Util::writeLog ( 'migration','starting export for Shorty', OCP\Util::INFO );
|
||||
$options = array(
|
||||
'table'=>'shorty',
|
||||
'matchcol'=>'user',
|
||||
'matchval'=>$this->uid,
|
||||
'idcol'=>'id'
|
||||
);
|
||||
$ids = $this->content->copyRows( $options );
|
||||
$count = OC_Shorty_Tools::countShorties();
|
||||
// check for success
|
||||
if( (is_array($ids) && is_array($count))
|
||||
&& (count($ids)==$count['sum_shortys']) )
|
||||
return true;
|
||||
else return false;
|
||||
} // function export
|
||||
|
||||
function import ( )
|
||||
{
|
||||
switch( $this->appinfo->version )
|
||||
{
|
||||
default:
|
||||
$query = $this->content->prepare( "SELECT * FROM shorty WHERE user_id LIKE ?" );
|
||||
$result = $query->execute( array( $this->olduid ) );
|
||||
if (is_array(is_array($result)))
|
||||
{
|
||||
while( $row = $result->fetchRow() )
|
||||
{
|
||||
$param = array (
|
||||
'id' => $row['id'],
|
||||
'status' => $row['status'],
|
||||
'title' => $row['title'],
|
||||
'favicon' => $row['favicon'],
|
||||
'source' => $row['source'],
|
||||
'target' => $row['target'],
|
||||
'user' => $row['user'],
|
||||
'until' => $row['until'],
|
||||
'created' => $row['created'],
|
||||
'accessed' => $row['accessed'],
|
||||
'clicks' => $row['clicks'],
|
||||
'notes' => $row['notes'],
|
||||
);
|
||||
// import each shorty one by one, no special treatment required, since no autoincrement id is used
|
||||
$query = OCP\DB::prepare( sprintf ( "INSERT INTO *PREFIX*shorty(%s) VALUES (%s)",
|
||||
implode(',',array_keys($param)),
|
||||
implode(',',array_fill(0,count($param),'?')) ) );
|
||||
$query->execute( $param );
|
||||
} // while
|
||||
} // if
|
||||
break;
|
||||
} // switch
|
||||
// check for success by counting the generated entries
|
||||
$count = OC_Shorty_Tools::countShorties();
|
||||
if( (is_array($result) && is_array($count))
|
||||
&& (count($result)==$count['sum_shortys']) )
|
||||
return true;
|
||||
else return false;
|
||||
} // function import
|
||||
|
||||
} // class OC_Migration_Provider_Shorty
|
||||
|
||||
// Load the provider
|
||||
new OC_Migration_Provider_Shorty ( 'shortys' );
|
||||
|
||||
?>
|
|
@ -1,109 +0,0 @@
|
|||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file css/preferences.css
|
||||
* @brief Style definitions for the user preference dialog
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
#shorty img {
|
||||
vertical-align: middle;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
#shorty #shortlet {
|
||||
outline: medium none;
|
||||
padding: 0.6em 0.8em;
|
||||
background-image: -moz-linear-gradient(center bottom, Lavender 0%, white 50%);
|
||||
border: 1px solid #DDDDDD;
|
||||
border-radius: 0.5em 0.5em 0.5em 0.5em;
|
||||
box-shadow: 0 1px 0 #BBBBBB inset;
|
||||
}
|
||||
#shorty #shortlet a {
|
||||
font-style: italic;
|
||||
color: DarkSlateGray;
|
||||
}
|
||||
#shorty #shortlet:after {
|
||||
content: url("%appswebroot%/apps/shorty/img/drag_me.png");
|
||||
position: relative;
|
||||
top: -12px;
|
||||
margin-left: -160px;
|
||||
}
|
||||
#shorty .chzn-container {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#shorty .title {
|
||||
margin-bottom: 0.6em;
|
||||
}
|
||||
|
||||
#shorty .aspect {
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
width: 6em;
|
||||
margin: 0 0.2em 0.4em 0;
|
||||
}
|
||||
|
||||
#shorty .explain {
|
||||
display: inline-block;
|
||||
font-style: italic;
|
||||
margin: 0.3em;
|
||||
}
|
||||
|
||||
#shorty .example {
|
||||
font-family: Monospace;
|
||||
margin: 0.3em;
|
||||
}
|
||||
|
||||
#shorty a.external {
|
||||
text-decoration:underline;
|
||||
}
|
||||
#shorty a.external:after {
|
||||
content:url("%appswebroot%/apps/shorty/img/actions/external.png");
|
||||
margin-left:0.3em;
|
||||
}
|
||||
|
||||
#verification #hourglass {
|
||||
display: block;
|
||||
text-align: center;
|
||||
width: 100%; height: 100%;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#verification #failure {
|
||||
display: none;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
#verification #success {
|
||||
display: none;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
#verification legend {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file css/settings.css
|
||||
* @brief Style definitions for the system settings dialog
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
#shorty img {
|
||||
vertical-align: middle;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
#shorty .aspect {
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
width: 6em;
|
||||
margin: 0 0.2em 0.4em;
|
||||
}
|
||||
|
||||
#shorty .explain {
|
||||
display: inline-block;
|
||||
font-style: italic;
|
||||
margin: 0.3em;
|
||||
}
|
||||
|
||||
#shorty .example {
|
||||
font-family: Monospace;
|
||||
margin: 0.3em;
|
||||
text-decoration: underline;
|
||||
color: blue;
|
||||
}
|
||||
|
||||
#shorty .title {
|
||||
margin-bottom: 0.6em;
|
||||
}
|
|
@ -1,488 +0,0 @@
|
|||
/**
|
||||
* @package shorty an ownCloud url shortener plugin
|
||||
* @category internet
|
||||
* @author Christian Reiner
|
||||
* @copyright 2011-2012 Christian Reiner <foss@christian-reiner.info>
|
||||
* @license GNU Affero General Public license (AGPL)
|
||||
* @link information
|
||||
* @link repository https://svn.christian-reiner.info/svn/app/oc/shorty
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the license, or any later version.
|
||||
*
|
||||
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file css/shorty.css
|
||||
* @brief Style definitions of the plugins own view
|
||||
* @author Christian Reiner
|
||||
*/
|
||||
|
||||
/* everything :-) */
|
||||
#content { overflow: auto; }
|
||||
|
||||
/* a case sensitive help button */
|
||||
#content #controls #help {
|
||||
/* float:right; */
|
||||
}
|
||||
/* adapt optical appearance in case the help button is pushed into the header */
|
||||
#header #help {
|
||||
float:right;
|
||||
background-color:blue;
|
||||
}
|
||||
|
||||
/* the shorty desktop, a canvas, contains all elements except of those pushed into the header */
|
||||
#desktop {
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
/* width: 100%; height: 100%; */
|
||||
background: transparent;
|
||||
text-align: left;
|
||||
margin-top: 30px;
|
||||
padding: 2.5em 0.5em;
|
||||
padding-top: 20px;
|
||||
}
|
||||
/* top bar, holding main control elements */
|
||||
#controls {
|
||||
display: none;
|
||||
}
|
||||
/* a dialog for verification of the static backend setup */
|
||||
#verification {
|
||||
overflow: hidden;
|
||||
}
|
||||
#verification p {
|
||||
padding-bottom:0.4em;
|
||||
}
|
||||
|
||||
/* an activity visualizer, currently a 'rotating timer wheel' */
|
||||
#hourglass {
|
||||
display: none;
|
||||
position: absolute;
|
||||
width: 100%; height: 100%;
|
||||
z-index: 1;
|
||||
background: transparent;
|
||||
}
|
||||
#hourglass img {
|
||||
margin:4em 8em;
|
||||
}
|
||||
/* a replacement list visualized in case the 'real' list is empty */
|
||||
#vacuum {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left:8em; top:9em;
|
||||
width: 100%; height: 100%;
|
||||
z-index: 2;
|
||||
white-space: nowrap;
|
||||
font-style: italic;
|
||||
background: transparent;
|
||||
}
|
||||
.shorty-standalone #busy {
|
||||
display: none;
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* the list of shorties */
|
||||
#list {
|
||||
display: inline;
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
margin: 0.4em;
|
||||
background: transparent;
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
}
|
||||
/* the collapsable toolbar below the lists column title row */
|
||||
#list thead #toolbar img {
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
}
|
||||
#list thead #toolbar img.shorty-sorter {
|
||||
opacity:0.6;
|
||||
}
|
||||
/* last column in the list, content usually invisible, except when hovered */
|
||||
#list thead #toolbar img.shorty-active {
|
||||
border:1px solid #888888;
|
||||
border-radius: 0.3em;
|
||||
}
|
||||
#list thead tr:nth-child(2) > th {
|
||||
padding-bottom:0.5em;
|
||||
}
|
||||
/* somewhat more fixed layout for the table */
|
||||
#list thead #titlebar th span {
|
||||
display:inline-block;
|
||||
}
|
||||
#list tbody th#title,
|
||||
#list tbody td#title,
|
||||
#list tbody th#target,
|
||||
#list tbody td#target {
|
||||
width:10em;
|
||||
}
|
||||
#list thead #clicks span {
|
||||
width:3em;
|
||||
}
|
||||
#list thead #until span {
|
||||
width:5em;
|
||||
}
|
||||
#list thead #toolbar input,
|
||||
#list thead #toolbar .chzn-container {
|
||||
width:6em;
|
||||
font-size: 11px;
|
||||
margin: 0;
|
||||
padding: 0.4em 0.3em 0.2em;
|
||||
vertical-align: baseline;
|
||||
background-color:#FFFFFF;
|
||||
}
|
||||
|
||||
/* column title apeparance */
|
||||
#list thead th {
|
||||
font-weight: bold;
|
||||
padding: 1px 6px;
|
||||
}
|
||||
#list thead th#clicks,
|
||||
#list thead th#until,
|
||||
#list thead th#actions {
|
||||
text-align: center;
|
||||
}
|
||||
/* hide the dummy row */
|
||||
#list thead tr:last-child { display: none; }
|
||||
/* hide the content of the 'actions' column, except when being hovered */
|
||||
#list tbody tr td span.shorty-actions {
|
||||
visibility:visible;
|
||||
opacity:0;
|
||||
transition: opacity 500ms;
|
||||
-moz-transition: opacity 500ms;
|
||||
-webkit-transition: opacity 500ms;
|
||||
-ms-transition: opacity 500ms;
|
||||
-o-transition: opacity 500ms;
|
||||
width:100px;
|
||||
overflow:auto;
|
||||
}
|
||||
#list tbody tr:hover td span.shorty-actions {
|
||||
opacity:1;
|
||||
transition: opacity 500ms;
|
||||
-moz-transition: opacity 500ms;
|
||||
-webkit-transition: opacity 500ms;
|
||||
-ms-transition: opacity 500ms;
|
||||
-o-transition: opacity 500ms;
|
||||
}
|
||||
/* highlight a specific, 'clicked' row in the list */
|
||||
#list tbody tr.clicked {
|
||||
border-radius: 0.5em;
|
||||
background-color:#EEEEEE;
|
||||
box-shadow: 0 0 0.5px #777777;
|
||||
transition: background-color 500ms;
|
||||
-moz-transition: background-color 500ms;
|
||||
-webkit-transition: background-color 500ms;
|
||||
-ms-transition: background-color 500ms;
|
||||
-o-transition: background-color 500ms;
|
||||
}
|
||||
/* strike through visible content of rows (entries) marked as deleted */
|
||||
#list tbody tr.deleted>#title,
|
||||
#list tbody tr.deleted>#target,
|
||||
#list tbody tr.deleted>#clicks,
|
||||
#list tbody tr.deleted>#until {
|
||||
color: gray;
|
||||
text-decoration: line-through;
|
||||
background: transparent url('%appswebroot%/apps/shorty/img/status/strike.png') 0 50% repeat-x;
|
||||
}
|
||||
/* replace the 'delete' action icon by an 'undelete' icon */
|
||||
#list tbody tr.deleted>#actions #del:after {
|
||||
content: url("%appswebroot%/apps/shorty/img/actions/recycle.png");
|
||||
position: relative;
|
||||
top: 3px;
|
||||
margin-left: -19px;
|
||||
padding: 0;
|
||||
opacity: 0;
|
||||
}
|
||||
#list tbody tr.deleted:hover>#actions #del>img {
|
||||
opacity: 0;
|
||||
}
|
||||
#list tbody tr.deleted:hover>#actions #del:after {
|
||||
opacity: 1;
|
||||
}
|
||||
/* general table cell appearance */
|
||||
#list tbody td {
|
||||
padding: 1px 6px;
|
||||
}
|
||||
#list tbody td#until {
|
||||
text-align: center;
|
||||
}
|
||||
#list tbody td#clicks {
|
||||
text-align: right;
|
||||
margin-right: 0.4em;
|
||||
}
|
||||
/* prettyfied select boxes */
|
||||
#content span.shorty-select select {
|
||||
width: 6.4em;
|
||||
margin: 0;
|
||||
padding: 0.2em;
|
||||
opacity:0.8;
|
||||
border:0 none;
|
||||
font-size: 10px;
|
||||
}
|
||||
#content span.shorty-select {
|
||||
border: 1px solid #DDDDDD;
|
||||
border-radius: 0.5em 0.5em 0.5em 0.5em;
|
||||
box-shadow: 0 1px 1px #FFFFFF, 0 1px 0 #BBBBBB inset;
|
||||
outline: medium none;
|
||||
padding: 2px;
|
||||
}
|
||||
/* general style of interactive dialogs */
|
||||
.shorty-dialog {
|
||||
display: none;
|
||||
color: black;
|
||||
border-bottom-left-radius: 1em;
|
||||
border-bottom-right-radius: 1em;
|
||||
box-shadow: 0 2px 1px #777777;
|
||||
vertical-align:middle;
|
||||
z-index:100;
|
||||
}
|
||||
.shorty-dialog fieldset {
|
||||
position:relative;
|
||||
border-bottom-left-radius: 0.5em;
|
||||
border-bottom-right-radius: 0.5em;
|
||||
border: 1px solid gray;
|
||||
padding: 2px 4px 8px;
|
||||
}
|
||||
.shorty-dialog br {
|
||||
clear: left;
|
||||
}
|
||||
.shorty-dialog legend {
|
||||
font-weight: bold;
|
||||
margin: 0 0 0 5px;
|
||||
padding: 0 0.5em 0 0.2em;
|
||||
}
|
||||
.shorty-dialog legend a {
|
||||
padding: 0;
|
||||
}
|
||||
.shorty-dialog textarea {
|
||||
width: 80%; height: 5em;
|
||||
background: none repeat scroll 0 0 #F8F8F8;
|
||||
color: #555555;
|
||||
border: 1px solid #DDDDDD;
|
||||
border-radius: 0.5em;
|
||||
cursor: text;
|
||||
vertical-align:baseline;
|
||||
margin: 0.3em;
|
||||
}
|
||||
.shorty-dialog textarea:hover,
|
||||
.shorty-dialog textarea:active {
|
||||
background-color: #FFFFFF;
|
||||
color: #333333;
|
||||
opacity: 1;
|
||||
}
|
||||
.shorty-dialog input {
|
||||
width: 80%;
|
||||
}
|
||||
.shorty-dialog a,
|
||||
.shorty-dialog input,
|
||||
.shorty-dialog select,
|
||||
.shorty-dialog textarea,
|
||||
.shorty-dialog button {
|
||||
padding: 0.4em 0.2em;
|
||||
}
|
||||
.shorty-dialog input[readonly],
|
||||
.shorty-dialog select[readonly],
|
||||
.shorty-dialog textarea[readonly],
|
||||
.shorty-dialog button[readonly] {
|
||||
border: 0 none;
|
||||
/* box-shadow: 0 0 0; */
|
||||
box-shadow: 0 0 0 #FFFFFF;
|
||||
outline: none;
|
||||
background: none;
|
||||
background-color: #F7F7F7;
|
||||
padding: 0.3em 0.3em;
|
||||
}
|
||||
.shorty-dialog button#confirm {
|
||||
width: 12em; height: 2em;
|
||||
border: 1px solid lightgray;
|
||||
background-color: #EEEEEE;
|
||||
}
|
||||
.shorty-dialog button#confirm.sharp {
|
||||
background-color: white;
|
||||
}
|
||||
.shorty-dialog button#confirm.sharp:hover {
|
||||
/* border-color: green; */
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
/* dialogs floating above other content ('standing alone') */
|
||||
.shorty-standalone {
|
||||
width: 46em;
|
||||
margin: -1px 1em 0;
|
||||
padding: 0.5em;
|
||||
background: none repeat scroll 0 0 #F7F7F7;
|
||||
}
|
||||
.shorty-standalone fieldset {
|
||||
width: 45em;
|
||||
}
|
||||
/* dialogs related to elements ('embedded in the content') */
|
||||
.shorty-embedded {
|
||||
left: 6em;
|
||||
width: 34em;
|
||||
margin: -1px 4em 0;
|
||||
padding: 0.5em;
|
||||
background: none repeat scroll 0 0 #EEEEEE;
|
||||
position: absolute;
|
||||
}
|
||||
.shorty-embedded fieldset {
|
||||
/* width: 32em; */
|
||||
}
|
||||
.shorty-embedded a#source,
|
||||
.shorty-embedded a#relay,
|
||||
.shorty-embedded a#target {
|
||||
display: inline-block;
|
||||
width: 26em;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.shorty-embedded a.shorty-clickable:before {
|
||||
content:url("%appswebroot%/apps/shorty/img/actions/external.png");
|
||||
margin-right:0.3em;
|
||||
}
|
||||
.shorty-embedded select {
|
||||
margin: 0 0 0.2em 1.0em;
|
||||
padding: 0.2em 0.4em 0.2em 0.2em;
|
||||
border: 0 none;
|
||||
background-color: #F4F4F4;
|
||||
}
|
||||
.shorty-embedded img.shorty-usage {
|
||||
opacity: 0.6;
|
||||
margin: 1em 1.5em 0.2em;
|
||||
padding: 0;
|
||||
}
|
||||
.shorty-embedded img.shorty-usage.disabled {
|
||||
opacity: 0.2;
|
||||
}
|
||||
.shorty-embedded img.shorty-usage:not(.disabled):hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
.shorty-dialog label {
|
||||
display: inline-block;
|
||||
clear:none;
|
||||
width: 5.5em;
|
||||
text-align: left;
|
||||
vertical-align: baseline;
|
||||
padding: 0.6em 0.5em 0.4em 0.3em;
|
||||
cursor: default;
|
||||
}
|
||||
.shorty-dialog span {
|
||||
padding: 0.6em 0.5em 0.4em 0.3em;
|
||||
}
|
||||
.shorty-dialog span.label-line {
|
||||
display: inline;
|
||||
clear: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
/* elements (rows) freshly added to the list, this calss might trigger visual effects like pulsation */
|
||||
.shorty-fresh {
|
||||
display: none;
|
||||
}
|
||||
/* elements (rows) currently filtered out (toolbars column filter options) */
|
||||
.shorty-filtered {
|
||||
display: none;
|
||||
}
|
||||
/* style of all icons (as opposed to all images) */
|
||||
.shorty-icon {
|
||||
display: inline;
|
||||
background: transparent;
|
||||
vertical-align: middle;
|
||||
padding: 1px;
|
||||
}
|
||||
/* dim entries with expired 'until' dates */
|
||||
.shorty-expired {
|
||||
color: gray;
|
||||
}
|
||||
/* but keep embedded dialogs readable */
|
||||
.shorty-expired .shorty-dialog {
|
||||
color: black;
|
||||
}
|
||||
.shorty-expired img {
|
||||
opacity : 0.2;
|
||||
}
|
||||
.shorty-expired .shorty-dialog img {
|
||||
opacity : 1;
|
||||
}
|
||||
.shorty-expired #until {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
/* some general style flavours */
|
||||
.shorty-prompt {
|
||||
margin-left: 4px;
|
||||
}
|
||||
.shorty-value {
|
||||
margin-right: 4px;
|
||||
}
|
||||
.shorty-single {
|
||||
padding: 0.5em 1em;
|
||||
}
|
||||
.shorty-single:hover {
|
||||
background-color: #EAEAEA;
|
||||
}
|
||||
.shorty-single:hover .shorty-actions {
|
||||
display: block;
|
||||
}
|
||||
.shorty-id {
|
||||
color: black;
|
||||
}
|
||||
.shorty-date {
|
||||
width: 40%;
|
||||
}
|
||||
.shorty-notes {
|
||||
color: blue;
|
||||
text-decoration: none;
|
||||
}
|
||||
.shorty-source {
|
||||
color: gray;
|
||||
}
|
||||
.shorty-target {
|
||||
color: green;
|
||||
}
|
||||
.shorty-meta {
|
||||
margin: 0.1em;
|
||||
}
|
||||
/* close buttons in dialogs, embedded or standalone */
|
||||
.shorty-close-button {
|
||||
display:inline;
|
||||
float:left;
|
||||
margin:0 0.8em 0 0.3em;
|
||||
padding:0;
|
||||
}
|
||||
.shorty-close-button img {
|
||||
vertical-align: middle;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
/* unlike elsewhere we underline clickable links in dialogs */
|
||||
.shorty-clickable {
|
||||
white-space: nowrap;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.shorty-framed {
|
||||
display:inline-block;
|
||||
padding:1em;
|
||||
background-color:white;
|
||||
border:1px solid black;
|
||||
}
|
||||
/* keep long entries like urls from disrupting the compact appearance of the list */
|
||||
.ellipsis {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
width: inherit;
|
||||
}
|