Compare commits
10 commits
024ef59428
...
3bbd987e35
Author | SHA1 | Date | |
---|---|---|---|
3bbd987e35 | |||
54ae2c7b06 | |||
b39fbaa402 | |||
770f4f6c26 | |||
a2f38653fb | |||
c5289f39bb | |||
1a5441ba75 | |||
6636119200 | |||
02efd52c48 | |||
5479785cc1 |
12
README.md
|
@ -1,5 +1,9 @@
|
|||
# Software Freedom Conservancy website
|
||||
|
||||
This is a Python/[Django](https://www.djangoproject.com/)-based website that
|
||||
runs [sfconservancy.org](https://sfconservancy.org).
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
The canonical location for this repository is [on Conservancy’s
|
||||
|
@ -9,9 +13,9 @@ Kallithea instance](https://k.sfconservancy.org/website).
|
|||
## License
|
||||
|
||||
The software included herein, such as the Python source files, are generally
|
||||
licensed [AGPLv3](AGPLv3)-or-later. The Javascript is a hodgepodge of
|
||||
licensing, but all of it is compatible with [AGPLv3](AGPLv3)-or-later. See
|
||||
the notices at the top of each Javascript file for licensing details.
|
||||
licensed [AGPLv3](AGPLv3)-or-later. JavaScript source is generally
|
||||
[GPLv3](GPLv3)-or-later. See the notices at the top of each Javascript file for
|
||||
specific licensing details.
|
||||
|
||||
The content and text (such as the HTML files) is currently
|
||||
[CC-BY-SA-3.0](CC-By-SA-3.0).
|
||||
|
@ -20,7 +24,7 @@ The content and text (such as the HTML files) is currently
|
|||
## Server configuration
|
||||
|
||||
Conservancy's webserver runs on a standard Debian installation. For
|
||||
configuration requirements, see `deploy/ansible/install.yml`.
|
||||
configuration requirements, see `deploy/install.yml`.
|
||||
|
||||
|
||||
## CDN
|
||||
|
|
6
bin/test
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
set -e # Abort on failure
|
||||
set -x
|
||||
|
||||
python3 -m pytest
|
|
@ -17,5 +17,3 @@ class EntryAdmin(admin.ModelAdmin):
|
|||
search_fields = ['headline', 'summary', 'body']
|
||||
prepopulated_fields = {'slug': ("headline",)}
|
||||
filter_horizontal = ('tags',)
|
||||
|
||||
|
||||
|
|
|
@ -72,11 +72,11 @@ class Entry(models.Model, bsoup.SoupModelMixin):
|
|||
|
||||
# Ping Technorati
|
||||
j = xmlrpc.client.Server('http://rpc.technorati.com/rpc/ping')
|
||||
reply = j.weblogUpdates.ping(blog_name, blog_url)
|
||||
j.weblogUpdates.ping(blog_name, blog_url)
|
||||
|
||||
# Ping Google Blog Search
|
||||
j = xmlrpc.client.Server('http://blogsearch.google.com/ping/RPC2')
|
||||
reply = j.weblogUpdates.ping(blog_name, blog_url, post_url)
|
||||
j.weblogUpdates.ping(blog_name, blog_url, post_url)
|
||||
|
||||
# Call any superclass's method
|
||||
super().save()
|
||||
|
|
|
@ -3,7 +3,6 @@ from functools import reduce
|
|||
|
||||
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.views.generic import ListView
|
||||
from django.views.generic.dates import (
|
||||
DateDetailView,
|
||||
DayArchiveView,
|
||||
|
@ -12,7 +11,7 @@ from django.views.generic.dates import (
|
|||
)
|
||||
|
||||
from ..staff.models import Person
|
||||
from .models import Entry, EntryTag
|
||||
from .models import EntryTag
|
||||
|
||||
|
||||
def OR_filter(field_name, objs):
|
||||
|
@ -124,7 +123,7 @@ class BlogYearArchiveView(YearArchiveView):
|
|||
make_object_list = True
|
||||
allow_future = True
|
||||
extra_context = {}
|
||||
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context.update(self.extra_context)
|
||||
|
@ -133,7 +132,7 @@ class BlogYearArchiveView(YearArchiveView):
|
|||
class BlogMonthArchiveView(MonthArchiveView):
|
||||
allow_future = True
|
||||
extra_context = {}
|
||||
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context.update(self.extra_context)
|
||||
|
@ -142,7 +141,7 @@ class BlogMonthArchiveView(MonthArchiveView):
|
|||
class BlogDayArchiveView(DayArchiveView):
|
||||
allow_future = True
|
||||
extra_context = {}
|
||||
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context.update(self.extra_context)
|
||||
|
@ -151,7 +150,7 @@ class BlogDayArchiveView(DayArchiveView):
|
|||
class BlogDateDetailView(DateDetailView):
|
||||
allow_future = True
|
||||
extra_context = {}
|
||||
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context.update(self.extra_context)
|
||||
|
|
|
@ -117,7 +117,7 @@ Open Source Award in 2012</a>, in recognition for his lifelong policy work on
|
|||
copyleft licensing. Kuhn has <a href="http://ebb.org/bkuhn/blog/">a
|
||||
blog</a> and co-hosts
|
||||
the audcast, <a href="http://faif.us/"><cite>Free as in Freedom</cite></a>.</p>
|
||||
|
||||
|
||||
<h2 id="allison">Dr. Allison Randal - Chair of the Board</h2>
|
||||
|
||||
<p> Over the course of multiple decades as a free software developer,
|
||||
|
|
|
@ -35,7 +35,7 @@ Texas Linux Fest, LibrePlanet, CopyCamp Toronto, FOSSLC's Summercamp,
|
|||
CopyleftConf, and the Open Video Conference.</p>
|
||||
|
||||
<h2 id="tracy">Tracy Homer - Operations Manager</h2>
|
||||
<p>Tracy acts as Operations Manager at Software Freedom Conservancy.
|
||||
<p>Tracy acts as Operations Manager at Software Freedom Conservancy.
|
||||
Bringing her super-skills of organization and love of bureaucracy,
|
||||
she helps things run at SFC smoothly behind the scenes.
|
||||
Tracy also serves on the board of her local hackerspace, an organization
|
||||
|
|
|
@ -64,7 +64,7 @@ launched</a> the <cite>GPL
|
|||
Compliance Project for Linux Developers</cite>, which handles compliance and
|
||||
enforcement activities on behalf of more than a dozen Linux copyright
|
||||
holders.</p>
|
||||
|
||||
|
||||
<p>The GPL Compliance Project for Linux Developers is comprised of copyright
|
||||
holders in the kernel, Linux, who have contributed to Linux under its
|
||||
license, <a href="http://www.gnu.org/licenses/gpl-2.0.html">the
|
||||
|
|
|
@ -78,7 +78,7 @@
|
|||
<p>Conservancy has had substantial success in leveraging more device freedom
|
||||
in other subindustries through GPL compliance. In 2009, Conservancy, with
|
||||
co-Plaintiff Erik Andersen, sued fourteen defendants in federal court under
|
||||
copyright claims on behalf of its BusyBox member project. Conservancy
|
||||
copyright claims on behalf of its BusyBox member project. Conservancy
|
||||
achieved compliance for the BusyBox project in all fourteen
|
||||
cases. Most notably, the GPL-compliant source release obtained in the
|
||||
lawsuit for certain Samsung televisions provided the basis for
|
||||
|
|
|
@ -20,7 +20,7 @@ and improvement of the released software for users.</p>
|
|||
success found with OpenWrt</a> <em>only by</em> a substantial
|
||||
effort <strong>after</strong> enforcement occurs to turn the compliant
|
||||
source release into a viable alternative firmware for the platform.</p>
|
||||
|
||||
|
||||
<p>Conservancy has seen non-compliant Linux-based firmwares on refrigerators,
|
||||
baby monitors, virtual assistants, soundbars, doorbells, home security
|
||||
cameras, police body cameras, cars, AV receivers, and televisions. We
|
||||
|
|
|
@ -29,13 +29,13 @@
|
|||
|
||||
<!--- FIXME: bkuhn is rewriting this blog post fresh the weekend of --
|
||||
2020-07-18 so we need not link to ebb.org anymore when we roll out
|
||||
these changes ... which never happened, still need to do that -->
|
||||
these changes ... which never happened, still need to do that -->
|
||||
|
||||
<p>If you think you've found a GPL violation, we encourage you to
|
||||
read <a href="http://ebb.org/bkuhn/blog/2009/11/08/gpl-enforcement.html">this
|
||||
personal blog post by our Policy Fellow, Bradley M. Kuhn</a>, about good
|
||||
practices in discovering and reporting GPL violations.</p>
|
||||
|
||||
|
||||
<h2 id="sustain">Donate to Sustain This Work</h2>
|
||||
|
||||
<p>Finally, Conservancy welcomes <a href="#donate-box"
|
||||
|
|
|
@ -130,7 +130,7 @@ full press kit, with substantial additional information and resources for
|
|||
<li><a href="/docs/software-freedom-conservancy-v-vizio-complaint-2021-10-19.pdf">The
|
||||
legal complaint is available</a>.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<h3>MEDIA CONTACT</h3>
|
||||
|
||||
|
|
|
@ -29,12 +29,12 @@
|
|||
much help as possible to comply with copyleft, so we did.</p>
|
||||
|
||||
<p>We've worked for years to help VMware comply with the GPL, but they
|
||||
refuse. Negotiations broke down for the last time when they insisted on an
|
||||
refuse. Negotiations broke down for the last time when they insisted on an
|
||||
NDA just to discuss settlement terms!</p>
|
||||
|
||||
<p>Christoph is among the most active developers of Linux. As of Feburary
|
||||
19, 2015, Christoph has contributed 279,653 lines of code to the Linux kernel,
|
||||
and ranks 20th among the 1,340 developers involved in the latest 3.19 kernel
|
||||
<p>Christoph is among the most active developers of Linux. As of Feburary
|
||||
19, 2015, Christoph has contributed 279,653 lines of code to the Linux kernel,
|
||||
and ranks 20th among the 1,340 developers involved in the latest 3.19 kernel
|
||||
release. Christoph also
|
||||
ranks 4th among those who have reviewed third-party source code, tirelessly
|
||||
corrected and commented on other developers' contributions. Christoph
|
||||
|
@ -97,8 +97,8 @@ judges think. (Check out our <a href="/copyleft-compliance/vmware-lawsuit-faq.h
|
|||
information</a>.)</p>
|
||||
|
||||
<p>Help us pay for this expensive lawsuit and to generally defend software
|
||||
freedom and the GPL. Help us show the world that copyleft matters. We are excited
|
||||
to announce that we already reached an anonymous match for this campaign, where every dollar donated
|
||||
freedom and the GPL. Help us show the world that copyleft matters. We are excited
|
||||
to announce that we already reached an anonymous match for this campaign, where every dollar donated
|
||||
was matched up to $50,000. However, that $100,000 is just an initial step
|
||||
and there is so much GPL enforcement work to do. So, please
|
||||
donate now: by becoming <a href="/sustainer/">a Conservancy Sustainer</a> or
|
||||
|
@ -119,7 +119,7 @@ information</a>.)</p>
|
|||
|
||||
type="video/webm; codecs="vp8, vorbis""
|
||||
/>
|
||||
|
||||
|
||||
</video>
|
||||
</p>
|
||||
|
||||
|
|
|
@ -112,7 +112,7 @@ Interest; all encourage you to <a href="#donate-box" class="donate-now">donate a
|
|||
|
||||
|
||||
<p>The project that Conservancy proposes will take a modest step
|
||||
forward in creating a better solution for everyone.
|
||||
forward in creating a better solution for everyone.
|
||||
<a href="#quotes">Many NPO leaders and academics agree</a> with Conservancy about the
|
||||
immediate need for work to begin on this
|
||||
effort. <a id="endorsements"
|
||||
|
|
|
@ -28,13 +28,13 @@
|
|||
<p>“FOSS” stands for free and open-source software that allows for software freedom. “Software freedom” means the freedom of a user to run, study, (re)distribute, and (re)install (modified) versions of a piece of software. More generally, it is the idea that we are entitled to rights when using software and there should be equal protections for privacy and redistribution. The rights should treat everyone equally: big businesses and individual consumers and users alike.</p>
|
||||
|
||||
<h3 id="">Q: I thought FOSS allowed companies to simply take software from the commons and put it into their products whenever they wanted? Isn’t that the whole point of FOSS—for companies to get components for their products and lower their cost of production?</h3>
|
||||
|
||||
|
||||
<p>While that is the main advantage that big corporations get from FOSS, it was never the primary impetus behind FOSS. Particularly through special licensing terms like the GPL, this licensing approach creates an egalitarian community of users, developers, and consumers. When functioning correctly, each individual and organization that participates in FOSS stands on equal footing with everyone else. Licenses like the GPL have rules to assure everyone's rights in that ecosystem are treated with equal respect and reverence. This is why compliance with these rules is important and we must stand up against companies who refuse to comply. </p>
|
||||
|
||||
|
||||
<h3 id="">Q: But, I'm not a software developer. Why should I care at all that Vizio won’t let me modify and reinstall GPL’d components in its SmartCast system?</h3>
|
||||
|
||||
|
||||
<p>Right-to-repair software is essential for everyone, even if you don't know how to make the repairs yourself. Once upon a time, we had lots of local vendors that could repair and fix TVs when they broke. That’s because TVs were once analog hardware devices that could be taken apart and understood merely by inspection from someone with the sufficient knowledge. TVs today are simply a little computer attached to a large display. As such, the most important part that needs repairs is usually when the software malfunctions, has bugs, or otherwise needs upgrades and changes. The GPL was specifically designed to assure such fixes could be done, and that consumers (or agents those consumers hire on the open market) can make such repairs and changes. </p>
|
||||
|
||||
|
||||
<h3 id="">Q: Alright, that makes sense, but I’m happy with Vizio’s SmartCast right now. What difference does it make to me if Vizio won’t give me the rights under the GPL?</h3>
|
||||
|
||||
<p>Time and time again, companies stop supporting the software build for the device long before the computer inside the device fails. In other words, these devices are built for planned premature obsolescence. </p>
|
||||
|
@ -42,13 +42,13 @@
|
|||
<p>By refusing to comply with the pro-consumer terms of the GPL, Vizio has the power to disable your TV at any time it wants, over your internet connection, without your knowledge or consent. If Vizio complied with the GPL, all would not be lost in this scenario: volunteers and third-party entities could take GPL’d software as a basis for a replacement for SmartCast. Without these rights, consumers are essentially forced to purchase new devices when they could be repaired.</p>
|
||||
|
||||
<h3 id="">Q: Creation of a replacement for SmartCast seems far-fetched to me. After all, most of the software in SmartCast is not actually GPL’d, only a portion of the components and programs are GPL’d. How will Vizio's compliance with the GPL actually lead to an alternative firmware?</h3>
|
||||
|
||||
|
||||
<p>Years ago, people said the very same thing about wireless routers, which had only partially GPL'd firmwares. However, thanks to actions to enforce the GPL in the wireless router market, the OpenWrt project was born! That project is now the premiere replacement software for wireless routers from almost every major manufacturer on the market. There is now healthy competition and even occasional cooperation between a hobbyist and community-led firmware project and the wireless router manufacturers. We believe the same can happen for TVs, but the first step is assuring the entire TV market complies with the GPL.</p>
|
||||
|
||||
|
||||
<h3 id="">Q: What indications do you have that compliance with the GPL will be a catalyst for alternative firmwares?</h3>
|
||||
|
||||
<p>Beyond the OpenWrt example, Software Freedom Conservancy sued 14 defendants for GPL violations in 2009, including Samsung for its 2009-era TV models. Thanks to the source release that was achieved through the settlement of that lawsuit, a community-led SamyGo project was created for that era of TVs. (source)</p>
|
||||
|
||||
|
||||
<h3 id="">Q: Who is the plaintiff in the lawsuit?</h3>
|
||||
|
||||
<p>Software Freedom Conservancy is the plaintiff in this case. The organization is filing as a third-party beneficiary, as the purchaser of a product which has copylefted code on it. A consumer of a product such as this has the right to access the source code so that it can be modified, studied, and redistributed (under the appropriate license conditions).</p>
|
||||
|
@ -60,7 +60,7 @@
|
|||
<h3 id="">Q: What type of case is this? How does it compare to previous litigation by Software Freedom Conservancy regarding the GPL?</h3>
|
||||
|
||||
<p>Previously, Software Freedom Conservancy filed as a copyright holder in federal court, or coordinated or funded litigation by other copyright holders in copyright cases in the U.S. and Germany. This is an example of how, historically, GPL litigation has focused on the rights of the developers. However, the rights assured by the GPL are actually not intended primarily for the original developers, but rather for people who purchase products that contain GPL’d software. That is what makes this litigation unique and historic in terms of defending consumer rights. It is the first case that focuses on the rights of individual consumers as third-party beneficiaries of the GPL.</p>
|
||||
|
||||
|
||||
<h3 id="">Q: Why are you filing a third-party beneficiary claim instead of a copyright claim?</h3>
|
||||
|
||||
<p>For too long, GPL enforcement has focused only on the rights of developers, who are often not the ones impacted by the technology in question. Some of those same developers even have lucrative jobs working for the various companies that violate the GPL. The GPL was designed to put the rights of hobbyists, individual developers, consumers, small companies, and nonprofit organizations on equal footing with big companies. With the advent of more contributions to GPL’d software coming from for-profit multinational corporations and fewer from individuals, the rights of these other parties are often given second-class billing. The third-party beneficiary claim prioritizes the consumers, who are the users and the most important beneficiaries of the rights under GPL.</p>
|
||||
|
@ -68,7 +68,7 @@
|
|||
<h3 id="">Q: Are you saying the rights of developers under the GPL are not important?</h3>
|
||||
|
||||
<p>Not at all! Most would agree that individual developers care deeply about the software freedom of users. They are the artists who create the amazing FOSS on which all of us rely. However, as Francis Ford Coppola once said (paraphrased), “to understand who holds the power in any culture, look not to the artists but who employs the artists”—a quote which suits this situation well. Large multinational corporations have co-opted FOSS for their own bottom lines. While many developers privately cheer Software Freedom Conservancy’s efforts and donate money to this cause, they fear the power that their employers exert and have asked Software Freedom Conservancy to fight for the software freedom of users.</p>
|
||||
|
||||
|
||||
<h3 id="">Q: Why is this important for the future of developers?</h3>
|
||||
|
||||
<p>The next generation of developers comes from the users of today. The golden age of FOSS that the industry now enjoys came to fruition from the counterculture created by FOSS activists in the 1990s and early 2000s. During this time, Linux and other GPL’d software was considered just a curiosity (and was even accused of being anti-American). Nevertheless, the rights assured by the GPL ultimately led to a new generation of software developers learning how to build Linux and all the amazingly useful FOSS around it. To recruit a diverse group of the next generation of enthusiastic developers, we must ensure that the rights under GPL are available to every single individual, consumer and hobbyist around the globe. That is what this lawsuit is about.</p>
|
||||
|
@ -76,11 +76,11 @@
|
|||
<h3 id="">Q: If the goal is to fight for all consumer rights, why not file this lawsuit as a class action? </h3>
|
||||
|
||||
<p>Forcing consumers to fight for their individual rights is one way that for-profit corporations exert their inappropriate power. Actions such as this lawsuit seek to disrupt this power dynamic by asserting that all consumers of copylefted code deserve the opportunity to know, access and modify the code on their devices. However, expecting all consumers to have to personally participate in that process not only puts an undue burden on them, it simply is not realistic. It is not how change happens. Furthermore, pursuant to “The Principles of Community Oriented GPL Enforcement,” the lawsuit does not prioritize financial remedy over compliance. This lawsuit seeks the most important remedy for the public good: release of the Complete, Corresponding Source (CCS) for all GPL’d components on Vizio TVs. Once that is achieved, the benefit is immediately available to not only all who purchased a Vizio TV, but also to the entire FOSS community. </p>
|
||||
|
||||
|
||||
<h3 id="">Q: What are “The Principles of Community Oriented GPL Enforcement”?</h3>
|
||||
|
||||
<p>In 2016, Software Freedom Conservancy published “The Principles of Community-Oriented GPL Enforcement” in response to those who might use copyleft licenses for their own financial gain. Software Freedom Conservancy is part of a long tradition of using copyleft enforcement as intended: to further the rights and freedoms of individual users, consumers, and developers. Pursuant to those principles, Software Freedom Conservancy never prioritizes financial gain over assuring the rights guaranteed by the GPL are upheld.</p>
|
||||
|
||||
|
||||
<h3 id="">Q: Are the court documents released? Does that relate to why the litigation was brought in the U.S.?</h3>
|
||||
|
||||
<p>Software Freedom Conservancy brought this litigation within the U.S. specifically because litigation in this country is completely public. Historically, Germany has been one of the most popular venues for GPL litigation but it also has a huge downside: the German legal system keeps all details of the cases private and there is little transparency. </p>
|
||||
|
|
|
@ -49,7 +49,7 @@ By: \hspace{0.95em}\rule{0.50\textwidth}{0.2mm} \hfill{}Date: \rule{0.25\textwid
|
|||
\begin{document}
|
||||
|
||||
\begin{center}
|
||||
\textsc{\Huge Fiscal Sponsorship Agreement}{\Huge {} }
|
||||
\textsc{\Huge Fiscal Sponsorship Agreement}{\Huge {} }
|
||||
\par\end{center}
|
||||
|
||||
\bigskip{}
|
||||
|
@ -57,11 +57,11 @@ By: \hspace{0.95em}\rule{0.50\textwidth}{0.2mm} \hfill{}Date: \rule{0.25\textwid
|
|||
|
||||
This Agreement is made by and between Software Freedom Conservancy
|
||||
(``Conservancy'') and FIXME-CONTRIBUTOR-NAMES (the ``\signatories'')
|
||||
on behalf of the project known as \projectname (the ``Project'') (each, a
|
||||
``Party''; together, ``the Parties''). Conservancy is a New York nonprofit
|
||||
public benefit corporation located in Brooklyn, New York, which has received
|
||||
recognition of exemption from federal income tax under Section 501(c)(3) of
|
||||
the Internal Revenue Code (IRC) and classification as a public charity under
|
||||
on behalf of the project known as \projectname (the ``Project'') (each, a
|
||||
``Party''; together, ``the Parties''). Conservancy is a New York nonprofit
|
||||
public benefit corporation located in Brooklyn, New York, which has received
|
||||
recognition of exemption from federal income tax under Section 501(c)(3) of
|
||||
the Internal Revenue Code (IRC) and classification as a public charity under
|
||||
IRC Sections 509(a)(1) and 170(b)(1)(A)(vi).
|
||||
|
||||
\textsc{Whereas:}
|
||||
|
@ -69,22 +69,22 @@ IRC Sections 509(a)(1) and 170(b)(1)(A)(vi).
|
|||
\begin{enumerate}[label=\Alph*.,ref=\S \Alph*]
|
||||
\item Conservancy's organizational mission and charitable goal is to promote,
|
||||
improve, develop and defend Free, Libre, and Open Source Software
|
||||
projects.
|
||||
projects.
|
||||
\item The purpose of the Project is to produce, distribute, document, and
|
||||
improve software and/or documentation that can be freely copied, modified and redistributed,
|
||||
and for which modified versions can also be redistributed (``Free Software''),
|
||||
and to facilitate and organize its production, improvement and ease
|
||||
of use.
|
||||
of use.
|
||||
\item Conservancy desires to act as the fiscal sponsor of the Project beginning
|
||||
on the Effective Date (as defined below) to assist the Project in
|
||||
accomplishing its purpose, which Conservancy has determined will further
|
||||
Conservancy's charitable goals. The \signatories desire to manage
|
||||
the Project under the sponsorship of Conservancy.
|
||||
the Project under the sponsorship of Conservancy.
|
||||
\item Conservancy's Board of Directors has approved the establishment
|
||||
of a fund to receive donations of cash and other property earmarked
|
||||
for support of the Project and to make disbursements in furtherance
|
||||
of the Project's mission (the ``Project Fund''). Currently, the
|
||||
principal office of the Project is located at: [FIXME: MAILING ADDRESS].
|
||||
principal office of the Project is located at: [FIXME: MAILING ADDRESS].
|
||||
\end{enumerate}
|
||||
\medskip{}
|
||||
|
||||
|
@ -94,7 +94,7 @@ principal office of the Project is located at: [FIXME: MAILING ADDRESS].
|
|||
\begin{enumerate}[label=\arabic*.,ref=\S~\arabic*]
|
||||
\item \textbf{Term of Agreement}. As of the Effective Date, the Project
|
||||
joins Conservancy, which relationship will continue unless and until
|
||||
terminated as set forth in \ref{Termination}.
|
||||
terminated as set forth in \ref{Termination}.
|
||||
\item \textbf{Project Management and Activities}.
|
||||
|
||||
|
||||
|
@ -106,7 +106,7 @@ to the \leadershipbody as defined in \ref{Representation},
|
|||
subject at all times to the direction and control of Conservancy's
|
||||
Board of Directors. Conservancy will only intervene in the program
|
||||
activities to the extent the Project is not in compliance with \ref{FreeSoftware}
|
||||
or \ref{CharitablePurpose} of this Agreement.
|
||||
or \ref{CharitablePurpose} of this Agreement.
|
||||
\item \textbf{The Project Will Be Free Software}. \label{FreeSoftware}
|
||||
Conservancy and the \leadershipbody agree that any and all software
|
||||
and/or documentation distributed by the Project will be distributed solely as Free Software.
|
||||
|
@ -119,11 +119,11 @@ revenue items, accounts payable and receivable, negotiation of leases
|
|||
and contracts, disbursement of Project funds (including grants), and
|
||||
other activities planned by the Project shall be the ultimate responsibility
|
||||
of Conservancy and shall be conducted in the name of Conservancy,
|
||||
beginning on the Effective Date.
|
||||
beginning on the Effective Date.
|
||||
\item \textbf{Project Not An Agent Of Conservancy}. The \signatories
|
||||
hereby acknowledge that the Project and the \leadershipbody
|
||||
do not and shall not act as an agent for Conservancy unless specifically
|
||||
authorized in writing by Conservancy to do so.
|
||||
authorized in writing by Conservancy to do so.
|
||||
\end{enumerate}
|
||||
\item \textbf{Fees}. The \signatories agree to donate ten percent
|
||||
(10\%) of the Project's gross revenue (including, but not necessarily limited
|
||||
|
@ -161,7 +161,7 @@ is the intent of the Parties that this Agreement be interpreted to
|
|||
provide Conservancy with variance powers necessary to enable Conservancy
|
||||
to treat the Project Fund as Conservancy's asset in accordance with
|
||||
Financial Accounting Statement No. 136 issued by the Financial Accounting
|
||||
Standards Board, while this Agreement is in effect.
|
||||
Standards Board, while this Agreement is in effect.
|
||||
\item \textbf{Project Fund Management / Performance of Charitable Purposes}.
|
||||
\label{CharitablePurpose} All of the assets received by Conservancy
|
||||
under the terms of this Agreement shall be devoted to the purposes
|
||||
|
@ -176,7 +176,7 @@ to participate or intervene in any political campaign on behalf or
|
|||
in opposition to any candidate for public office, to induce or encourage
|
||||
violations of law or public policy, to cause any private inurement
|
||||
or improper private benefit to occur, nor to take any other action
|
||||
inconsistent with IRC Section 501(c)(3).
|
||||
inconsistent with IRC Section 501(c)(3).
|
||||
|
||||
\item \textbf{Representation of the Project in Conservancy}. \label{Representation}The
|
||||
\signatories, each a signatory hereto, hereby establish and comprise
|
||||
|
@ -265,28 +265,28 @@ Members and/or to increase the Committee composition to the required
|
|||
Minimum.
|
||||
|
||||
\item \textbf{An Elected Oversight Committee.} The \signatories, each
|
||||
a signatory hereto, shall initially [FIXME: form or comprise] the
|
||||
\leadershipbody as a Project Committee (``Committee'') to
|
||||
a signatory hereto, shall initially [FIXME: form or comprise] the
|
||||
\leadershipbody as a Project Committee (``Committee'') to
|
||||
represent the Project in its official communication with Conservancy. The
|
||||
Committee shall hereafter be elected by community members of the Project as
|
||||
designated by the Committee or a subcommittee of the Committee (the
|
||||
``Community Members'').
|
||||
designated by the Committee or a subcommittee of the Committee (the
|
||||
``Community Members'').
|
||||
|
||||
The positions on the Committee will be on a two-year staggered basis
|
||||
([FIX-ME: some portion] of the initial board seats will be for one year).
|
||||
The members of the Committee may be removed from the position at any time
|
||||
by a majority vote of the Community Members. Upon the resignation or
|
||||
removal of a member of the Oversight Board, the Community Members shall
|
||||
elect a replacement Community Member to serve on the Committee.
|
||||
The positions on the Committee will be on a two-year staggered basis
|
||||
([FIX-ME: some portion] of the initial board seats will be for one year).
|
||||
The members of the Committee may be removed from the position at any time
|
||||
by a majority vote of the Community Members. Upon the resignation or
|
||||
removal of a member of the Oversight Board, the Community Members shall
|
||||
elect a replacement Community Member to serve on the Committee.
|
||||
|
||||
The Committee will elect a single individual to communicate with
|
||||
Conservancy (the ``Representative'') and shall notify Conservancy promptly
|
||||
following the election of a new Representative. The Representative will
|
||||
The Committee will elect a single individual to communicate with
|
||||
Conservancy (the ``Representative'') and shall notify Conservancy promptly
|
||||
following the election of a new Representative. The Representative will
|
||||
have the authority to instruct Conservancy on the Project's behalf on all
|
||||
matters.
|
||||
matters.
|
||||
|
||||
This section may be modified by a vote of at least $\frac{3}{4}$ths of the
|
||||
Community Members, with the consent of Conservancy, such consent not to be
|
||||
This section may be modified by a vote of at least $\frac{3}{4}$ths of the
|
||||
Community Members, with the consent of Conservancy, such consent not to be
|
||||
unreasonably withheld.
|
||||
|
||||
|
||||
|
@ -299,7 +299,7 @@ project usually has a uniquely worded Representation section. ]
|
|||
|
||||
\item \textbf{Outstanding Liabilities}. The \signatories represent
|
||||
that any liabilities that may be outstanding in connection with the
|
||||
Project have been disclosed to Conservancy.
|
||||
Project have been disclosed to Conservancy.
|
||||
\item \textbf{Termination}. \label{Termination} The \leadershipbody or Conservancy
|
||||
may terminate this Agreement at any time subject to the following
|
||||
understandings:
|
||||
|
@ -315,20 +315,20 @@ following requirements (the ``Successor has Qualified''):
|
|||
|
||||
\begin{enumerate}[label=\roman*.,ref=\theenumi(\alph{enumii})(\roman*)]
|
||||
\item the Successor is another nonprofit corporation which is tax-exempt
|
||||
under IRC Section 501(c)(3),
|
||||
under IRC Section 501(c)(3),
|
||||
\item the Successor is not classified as a private foundation under Section
|
||||
509(a),
|
||||
\item the Successor is willing and able to sponsor the Project, and,
|
||||
509(a),
|
||||
\item the Successor is willing and able to sponsor the Project, and,
|
||||
\item the Successor has (a) communicated its willingness to sponsor the
|
||||
Project in writing to Conservancy and (b) sent a copy of its 501(c)(3) determination letter to Conservancy, and,
|
||||
Project in writing to Conservancy and (b) sent a copy of its 501(c)(3) determination letter to Conservancy, and,
|
||||
\item the Successor is approved in writing by both Parties by the end of
|
||||
the Notice Period, such approval not to be unreasonably withheld.
|
||||
the Notice Period, such approval not to be unreasonably withheld.
|
||||
\end{enumerate}
|
||||
\item \textbf{Additional Search Periods}. If the Parties cannot agree on
|
||||
a Successor to sponsor the Project, the \leadershipbody
|
||||
shall have an additional 60 days to find a Successor willing and able
|
||||
to sponsor the Project. Any subsequent search periods of any length
|
||||
shall only be granted at Conservancy's written permission.
|
||||
shall only be granted at Conservancy's written permission.
|
||||
\item \textbf{Transfer to a Successor}. If a Successor has Qualified, the balance
|
||||
of assets in the Project Fund, together with any other assets held
|
||||
or liabilities incurred by Conservancy in connection with the
|
||||
|
@ -339,8 +339,8 @@ that may be required.
|
|||
\item \textbf{Termination Without a Successor}. If no Successor is found,
|
||||
Conservancy may dispose of Project assets and liabilities
|
||||
in any manner consistent with applicable tax and charitable trust
|
||||
laws.
|
||||
\item \textbf{\signatories' Right to Terminate.}
|
||||
laws.
|
||||
\item \textbf{\signatories' Right to Terminate.}
|
||||
The \signatories hereby acknowledge that they will relinquish any
|
||||
rights to terminate separate from the \leadershipbody as
|
||||
of the Effective Date.
|
||||
|
@ -352,16 +352,16 @@ This Agreement shall be interpreted and construed in accordance with
|
|||
the laws of the State of New York. This Agreement constitutes the
|
||||
only agreement, and supersedes all prior agreements and understandings,
|
||||
both written and oral, among the Parties with respect to the subject
|
||||
matter hereof.
|
||||
matter hereof.
|
||||
\item \textbf{Amendments. }This Agreement may not be amended or modified,
|
||||
except in writing and signed by both Conservancy and the entirety of \leadershipbody.
|
||||
except in writing and signed by both Conservancy and the entirety of \leadershipbody.
|
||||
\item \textbf{Counterparts / Facsimile}. This Agreement may be executed
|
||||
in two or more counterparts, each of which shall constitute an original,
|
||||
but all of which, when together, shall constitute but one and the
|
||||
same instrument, and shall become effective when one or more counterparts
|
||||
have been signed by each Party hereto and delivered to the other Party.
|
||||
In lieu of the original, a facsimile transmission or copy of the original
|
||||
shall be as effective and enforceable as the original.
|
||||
shall be as effective and enforceable as the original.
|
||||
\end{enumerate}
|
||||
\vfill{}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
sponsorship, we are selective and often refer projects to other fiscal
|
||||
sponsors that are a better fit. Nevertheless, we encourage projects to
|
||||
that need a non-profit home to apply to many fiscal sponsors.
|
||||
|
||||
|
||||
<p>Conservancy's Evaluation Committee considers applications on a rolling
|
||||
basis. Conservancy generally has dozens of projects in various stages of
|
||||
the application process. We do not move rapidly to accept new projects, as
|
||||
|
|
|
@ -46,10 +46,12 @@ def run(cmd, encoding=None, ok_exitcodes=frozenset([0]), **kwargs):
|
|||
no_data = ''
|
||||
with contextlib.ExitStack() as exit_stack:
|
||||
proc = exit_stack.enter_context(subprocess.Popen(cmd, **kwargs))
|
||||
pipes = [exit_stack.enter_context(open(
|
||||
getattr(proc, name).fileno(), mode, encoding=encoding, closefd=False))
|
||||
for name in ['stdout', 'stderr']
|
||||
if kwargs.get(name) is subprocess.PIPE]
|
||||
pipes = [
|
||||
exit_stack.enter_context(open(
|
||||
getattr(proc, name).fileno(), mode, encoding=encoding, closefd=False))
|
||||
for name in ['stdout', 'stderr']
|
||||
if kwargs.get(name) is subprocess.PIPE
|
||||
]
|
||||
if pipes:
|
||||
yield (proc, *pipes)
|
||||
else:
|
||||
|
@ -88,6 +90,7 @@ class GitPath:
|
|||
|
||||
def _cache(orig_func):
|
||||
attr_name = '_cached_' + orig_func.__name__
|
||||
|
||||
@functools.wraps(orig_func)
|
||||
def cache_wrapper(self):
|
||||
try:
|
||||
|
@ -353,4 +356,3 @@ def main(arglist=None, stdout=sys.stdout, stderr=sys.stderr):
|
|||
|
||||
if __name__ == '__main__':
|
||||
exit(main())
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
<ul>
|
||||
<li>funding travel expenses for project developers to attend relevant
|
||||
conferences.</li>
|
||||
conferences.</li>
|
||||
|
||||
<li>domain name fees, bandwidth costs, and computer equipment
|
||||
purchases.</li>
|
||||
|
@ -47,7 +47,7 @@
|
|||
software and its documentation.</li>
|
||||
|
||||
<li>sponsoring and organizing conferences for the project.</li>
|
||||
|
||||
|
||||
<li>trademark registration and enforcement.</li>
|
||||
|
||||
<li>FLOSS license enforcement and compliance activity.</li>
|
||||
|
|
|
@ -16,6 +16,3 @@ class EventAdmin(admin.ModelAdmin):
|
|||
@admin.register(EventMedia)
|
||||
class EventMediaAdmin(admin.ModelAdmin):
|
||||
list_display = ("event", "format", "novel")
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -96,4 +96,3 @@ class EventMedia(models.Model):
|
|||
|
||||
def __str__(self):
|
||||
return "{} media: {}".format(self.event, self.format)
|
||||
|
||||
|
|
|
@ -13,9 +13,11 @@ from .news.models import PressRelease
|
|||
|
||||
|
||||
class ConservancyFeedBase(Feed):
|
||||
def copyright_holder(self): return "Software Freedom Conservancy"
|
||||
def copyright_holder(self):
|
||||
return "Software Freedom Conservancy"
|
||||
|
||||
def license_no_html(self): return "Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License."
|
||||
def license_no_html(self):
|
||||
return "Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License."
|
||||
|
||||
def item_copyright(self, item):
|
||||
year = 2008
|
||||
|
@ -89,7 +91,8 @@ class OmnibusFeed(ConservancyFeedBase):
|
|||
def item_description(self, item):
|
||||
return item.summary
|
||||
|
||||
def item_enclosure_mime_type(self): return "audio/mpeg"
|
||||
def item_enclosure_mime_type(self):
|
||||
return "audio/mpeg"
|
||||
|
||||
def item_enclosure_url(self, item):
|
||||
if hasattr(item, 'mp3_path'):
|
||||
|
@ -98,9 +101,6 @@ class OmnibusFeed(ConservancyFeedBase):
|
|||
if hasattr(item, 'mp3_path'):
|
||||
return item.mp3_length
|
||||
|
||||
def item_pubdate(self, item):
|
||||
return item.pub_date
|
||||
|
||||
def item_author_name(self, item):
|
||||
if item.omnibus_type == "blog":
|
||||
return item.author.formal_name
|
||||
|
@ -174,7 +174,8 @@ class BlogFeed(ConservancyFeedBase):
|
|||
firstTime = True
|
||||
done = {}
|
||||
for tag in tags:
|
||||
if tag in done: continue
|
||||
if tag in done:
|
||||
continue
|
||||
if firstTime:
|
||||
answer += " ("
|
||||
firstTime = False
|
||||
|
@ -186,14 +187,16 @@ class BlogFeed(ConservancyFeedBase):
|
|||
else:
|
||||
answer += "."
|
||||
return answer
|
||||
|
||||
|
||||
def description(self, obj):
|
||||
answer = "Blogs at the Software Freedom Conservancy"
|
||||
|
||||
GET = obj.GET
|
||||
tags = []
|
||||
if 'author' in GET: tags = GET.getlist('author')
|
||||
if 'tag' in GET: tags += GET.getlist('tag')
|
||||
if 'author' in GET:
|
||||
tags = GET.getlist('author')
|
||||
if 'tag' in GET:
|
||||
tags += GET.getlist('tag')
|
||||
|
||||
done = {}
|
||||
if len(tags) == 1:
|
||||
|
@ -201,7 +204,8 @@ class BlogFeed(ConservancyFeedBase):
|
|||
elif len(tags) > 1:
|
||||
firstTime = True
|
||||
for tag in tags:
|
||||
if tag in done: continue
|
||||
if tag in done:
|
||||
continue
|
||||
if firstTime:
|
||||
answer += " tagged with "
|
||||
firstTime = False
|
||||
|
@ -214,7 +218,7 @@ class BlogFeed(ConservancyFeedBase):
|
|||
answer += "."
|
||||
|
||||
return answer
|
||||
|
||||
|
||||
def item_title(self, item):
|
||||
return item.headline
|
||||
|
||||
|
|
|
@ -19,7 +19,3 @@ class ExternalArticleAdmin(admin.ModelAdmin):
|
|||
list_filter = ['date']
|
||||
date_hierarchy = 'date'
|
||||
search_fields = ["title", "info", "publication"]
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -34,8 +34,10 @@ class PressRelease(models.Model, bsoup.SoupModelMixin):
|
|||
return self.headline
|
||||
|
||||
def get_absolute_url(self):
|
||||
return "/news/{}/{}/".format(self.pub_date.strftime("%Y/%b/%d").lower(),
|
||||
self.slug)
|
||||
return "/news/{}/{}/".format(
|
||||
self.pub_date.strftime("%Y/%b/%d").lower(),
|
||||
self.slug,
|
||||
)
|
||||
|
||||
def is_recent(self):
|
||||
return self.pub_date > (datetime.now() - timedelta(days=5))
|
||||
|
@ -60,11 +62,11 @@ class PressRelease(models.Model, bsoup.SoupModelMixin):
|
|||
|
||||
# Ping Technorati
|
||||
j = xmlrpc.client.Server('http://rpc.technorati.com/rpc/ping')
|
||||
reply = j.weblogUpdates.ping(blog_name, blog_url)
|
||||
j.weblogUpdates.ping(blog_name, blog_url)
|
||||
|
||||
# Ping Google Blog Search
|
||||
j = xmlrpc.client.Server('http://blogsearch.google.com/ping/RPC2')
|
||||
reply = j.weblogUpdates.ping(blog_name, blog_url, post_url)
|
||||
j.weblogUpdates.ping(blog_name, blog_url, post_url)
|
||||
|
||||
# Call any superclass's method
|
||||
super().save()
|
||||
|
@ -114,4 +116,3 @@ class ExternalArticle(models.Model):
|
|||
|
||||
objects = models.Manager()
|
||||
public = PublicExternalArticleManager()
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
from datetime import datetime
|
||||
|
||||
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import render
|
||||
from django.views.generic import ListView
|
||||
from django.views.generic.dates import (
|
||||
|
@ -11,8 +10,7 @@ from django.views.generic.dates import (
|
|||
YearArchiveView,
|
||||
)
|
||||
|
||||
from ..events.models import Event
|
||||
from .models import ExternalArticle, PressRelease
|
||||
from .models import PressRelease
|
||||
|
||||
|
||||
class NewsListView(ListView):
|
||||
|
@ -22,13 +20,14 @@ class NewsListView(ListView):
|
|||
# context['key'] = 'value'
|
||||
context.update(self.extra_context)
|
||||
return context
|
||||
|
||||
|
||||
def listing(request, *args, **kwargs):
|
||||
news_queryset = PressRelease.objects.all()
|
||||
|
||||
# if (not kwargs.has_key('allow_future')) or not kwargs['allow_future']:
|
||||
news_queryset = news_queryset.filter(**{'%s__lte' % kwargs['date_field']:
|
||||
datetime.now()})
|
||||
news_queryset = news_queryset.filter(
|
||||
**{'%s__lte' % kwargs['date_field']: datetime.now()}
|
||||
)
|
||||
|
||||
date_list = news_queryset.dates(kwargs['date_field'], 'year')
|
||||
|
||||
|
@ -93,4 +92,3 @@ class NewsDateDetailView(DateDetailView):
|
|||
# # del kwargs['slug']
|
||||
# callable = NewsDateDetailView.as_view(**kwargs)
|
||||
# return callable(request)
|
||||
|
||||
|
|
|
@ -39,5 +39,3 @@ class CastAdmin(admin.ModelAdmin):
|
|||
search_fields = ['title', 'summary', 'body']
|
||||
prepopulated_fields = {'slug': ("title",)}
|
||||
filter_horizontal = ('tags',)
|
||||
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
from datetime import datetime, timedelta
|
||||
|
||||
from django.db import models
|
||||
from django.urls import reverse
|
||||
|
||||
|
||||
class Podcast(models.Model):
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from .base import *
|
||||
from .base import * # NOQA
|
||||
|
||||
DEBUG = True
|
||||
ALLOWED_HOSTS = ['*']
|
||||
|
|
|
@ -2,7 +2,7 @@ import json
|
|||
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
|
||||
from .base import *
|
||||
from .base import * # NOQA
|
||||
|
||||
DEBUG = False
|
||||
ALLOWED_HOSTS = ['www.sfconservancy.org', 'sfconservancy.org']
|
||||
|
@ -25,7 +25,7 @@ DATABASES = {
|
|||
|
||||
# Apache/mod_wsgi doesn't make it straightforward to pass environment variables
|
||||
# to Django (can't use the Apache config).
|
||||
with open(BASE_DIR.parent / 'secrets.json') as f:
|
||||
with open(BASE_DIR.parent / 'secrets.json') as f: # NOQA
|
||||
secrets = json.load(f)
|
||||
|
||||
def get_secret(secrets, setting):
|
||||
|
|
|
@ -8,4 +8,3 @@ class PersonAdmin(admin.ModelAdmin):
|
|||
list_display = ("username", "formal_name", "casual_name",
|
||||
"currently_employed")
|
||||
list_filter = ["currently_employed"]
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ p, h1, h2, h3, h4, h5, h6, #mainContent ul, #mainContent ol {
|
|||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
p {
|
||||
p, li {
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
|
|
|
@ -186,7 +186,7 @@ template { display: none; }
|
|||
[hidden] { display: none; }
|
||||
/* Modules */
|
||||
/*
|
||||
|
||||
|
||||
BOX SIZING
|
||||
|
||||
*/
|
||||
|
@ -785,7 +785,7 @@ code, .code { font-family: Consolas, monaco, monospace; }
|
|||
/*
|
||||
|
||||
FORMS
|
||||
|
||||
|
||||
*/
|
||||
.input-reset { -webkit-appearance: none; -moz-appearance: none; }
|
||||
.button-reset::-moz-focus-inner, .input-reset::-moz-focus-inner { border: 0; padding: 0; }
|
||||
|
@ -1070,8 +1070,8 @@ code, .code { font-family: Consolas, monaco, monospace; }
|
|||
Docs: http://tachyons.io/docs/themes/skins/
|
||||
|
||||
Classes for setting foreground and background colors on elements.
|
||||
If you haven't declared a border color, but set border on an element, it will
|
||||
be set to the current text color.
|
||||
If you haven't declared a border color, but set border on an element, it will
|
||||
be set to the current text color.
|
||||
|
||||
*/
|
||||
/* Text colors */
|
||||
|
@ -1189,13 +1189,13 @@ code, .code { font-family: Consolas, monaco, monospace; }
|
|||
.bg-washed-yellow { background-color: #fffceb; }
|
||||
.bg-washed-red { background-color: #ffdfdf; }
|
||||
.bg-inherit { background-color: inherit; }
|
||||
/*
|
||||
|
||||
/*
|
||||
|
||||
SKINS:PSEUDO
|
||||
|
||||
Customize the color of an element when
|
||||
it is focused or hovered over.
|
||||
|
||||
|
||||
*/
|
||||
.hover-black:hover { color: #000; }
|
||||
.hover-black:focus { color: #000; }
|
||||
|
@ -1876,16 +1876,16 @@ code, .code { font-family: Consolas, monaco, monospace; }
|
|||
.grow-large:active { -webkit-transform: scale( .95 ); transform: scale( .95 ); }
|
||||
/* Add pointer on hover */
|
||||
.pointer:hover { cursor: pointer; }
|
||||
/*
|
||||
/*
|
||||
Add shadow on hover.
|
||||
|
||||
Performant box-shadow animation pattern from
|
||||
http://tobiasahlin.com/blog/how-to-animate-box-shadow/
|
||||
Performant box-shadow animation pattern from
|
||||
http://tobiasahlin.com/blog/how-to-animate-box-shadow/
|
||||
*/
|
||||
.shadow-hover { cursor: pointer; position: relative; transition: all .5s cubic-bezier( .165, .84, .44, 1 ); }
|
||||
.shadow-hover::after { content: ''; box-shadow: 0 0 16px 2px rgba( 0, 0, 0, .2 ); border-radius: inherit; opacity: 0; position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; transition: opacity .5s cubic-bezier( .165, .84, .44, 1 ); }
|
||||
.shadow-hover:hover::after, .shadow-hover:focus::after { opacity: 1; }
|
||||
/* Combine with classes in skins and skins-pseudo for
|
||||
/* Combine with classes in skins and skins-pseudo for
|
||||
* many different transition possibilities. */
|
||||
.bg-animate, .bg-animate:hover, .bg-animate:focus { transition: background-color .15s ease-in-out; }
|
||||
/*
|
||||
|
|
1
conservancy/static/css/tachyons.min.css
vendored
|
@ -4434,4 +4434,3 @@ being here with Ken thanks so much
|
|||
|
||||
01:00:28.380 --> 01:00:31.380
|
||||
foreign
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ then we're all dependent
|
|||
on that company's goodwill.
|
||||
|
||||
00:02:07.400 --> 00:02:10.800
|
||||
They can say of their own accord:
|
||||
They can say of their own accord:
|
||||
we'll solve this, not that.
|
||||
|
||||
00:02:10.800 --> 00:02:13.680
|
||||
|
@ -202,4 +202,3 @@ we request
|
|||
00:03:38.680 --> 00:03:44.200
|
||||
that you grant Karen Sandler
|
||||
the KU Leuven honorary doctorate.
|
||||
|
||||
|
|
|
@ -214,4 +214,3 @@ op voordracht van de Academische Raad,
|
|||
00:03:38.680 --> 00:03:44.200
|
||||
het eredoctoraat van de KU Leuven
|
||||
te verlenen aan mevrouw Karen Sandler.
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ By: \hspace{0.95em}\rule{0.50\textwidth}{0.2mm} \hfill{}Date: \rule{0.25\textwid
|
|||
\begin{document}
|
||||
|
||||
\begin{center}
|
||||
\textsc{\Huge Fiscal Sponsorship Agreement}{\Huge {} }
|
||||
\textsc{\Huge Fiscal Sponsorship Agreement}{\Huge {} }
|
||||
\par\end{center}
|
||||
|
||||
\bigskip{}
|
||||
|
@ -57,11 +57,11 @@ By: \hspace{0.95em}\rule{0.50\textwidth}{0.2mm} \hfill{}Date: \rule{0.25\textwid
|
|||
|
||||
This Agreement is made by and between Software Freedom Conservancy
|
||||
(``Conservancy'') and FIXME-CONTRIBUTOR-NAMES (the ``\signatories'')
|
||||
on behalf of the project known as \projectname (the ``Project'') (each, a
|
||||
``Party''; together, ``the Parties''). Conservancy is a New York nonprofit
|
||||
public benefit corporation located in Brooklyn, New York, which has received
|
||||
recognition of exemption from federal income tax under Section 501(c)(3) of
|
||||
the Internal Revenue Code (IRC) and classification as a public charity under
|
||||
on behalf of the project known as \projectname (the ``Project'') (each, a
|
||||
``Party''; together, ``the Parties''). Conservancy is a New York nonprofit
|
||||
public benefit corporation located in Brooklyn, New York, which has received
|
||||
recognition of exemption from federal income tax under Section 501(c)(3) of
|
||||
the Internal Revenue Code (IRC) and classification as a public charity under
|
||||
IRC Sections 509(a)(1) and 170(b)(1)(A)(vi).
|
||||
|
||||
\textsc{Whereas:}
|
||||
|
@ -69,22 +69,22 @@ IRC Sections 509(a)(1) and 170(b)(1)(A)(vi).
|
|||
\begin{enumerate}[label=\Alph*.,ref=\S \Alph*]
|
||||
\item Conservancy's organizational mission and charitable goal is to promote,
|
||||
improve, develop and defend Free, Libre, and Open Source Software
|
||||
projects.
|
||||
projects.
|
||||
\item The purpose of the Project is to produce, distribute, document, and
|
||||
improve software and/or documentation that can be freely copied, modified and redistributed,
|
||||
and for which modified versions can also be redistributed (``Free Software''),
|
||||
and to facilitate and organize its production, improvement and ease
|
||||
of use.
|
||||
of use.
|
||||
\item Conservancy desires to act as the fiscal sponsor of the Project beginning
|
||||
on the Effective Date (as defined below) to assist the Project in
|
||||
accomplishing its purpose, which Conservancy has determined will further
|
||||
Conservancy's charitable goals. The \signatories desire to manage
|
||||
the Project under the sponsorship of Conservancy.
|
||||
the Project under the sponsorship of Conservancy.
|
||||
\item Conservancy's Board of Directors has approved the establishment
|
||||
of a fund to receive donations of cash and other property earmarked
|
||||
for support of the Project and to make disbursements in furtherance
|
||||
of the Project's mission (the ``Project Fund''). Currently, the
|
||||
principal office of the Project is located at: [FIXME: MAILING ADDRESS].
|
||||
principal office of the Project is located at: [FIXME: MAILING ADDRESS].
|
||||
\end{enumerate}
|
||||
\medskip{}
|
||||
|
||||
|
@ -94,7 +94,7 @@ principal office of the Project is located at: [FIXME: MAILING ADDRESS].
|
|||
\begin{enumerate}[label=\arabic*.,ref=\S~\arabic*]
|
||||
\item \textbf{Term of Agreement}. As of the Effective Date, the Project
|
||||
joins Conservancy, which relationship will continue unless and until
|
||||
terminated as set forth in \ref{Termination}.
|
||||
terminated as set forth in \ref{Termination}.
|
||||
\item \textbf{Project Management and Activities}.
|
||||
|
||||
|
||||
|
@ -106,7 +106,7 @@ to the \leadershipbody as defined in \ref{Representation},
|
|||
subject at all times to the direction and control of Conservancy's
|
||||
Board of Directors. Conservancy will only intervene in the program
|
||||
activities to the extent the Project is not in compliance with \ref{FreeSoftware}
|
||||
or \ref{CharitablePurpose} of this Agreement.
|
||||
or \ref{CharitablePurpose} of this Agreement.
|
||||
\item \textbf{The Project Will Be Free Software}. \label{FreeSoftware}
|
||||
Conservancy and the \leadershipbody agree that any and all software
|
||||
and/or documentation distributed by the Project will be distributed solely as Free Software.
|
||||
|
@ -119,11 +119,11 @@ revenue items, accounts payable and receivable, negotiation of leases
|
|||
and contracts, disbursement of Project funds (including grants), and
|
||||
other activities planned by the Project shall be the ultimate responsibility
|
||||
of Conservancy and shall be conducted in the name of Conservancy,
|
||||
beginning on the Effective Date.
|
||||
beginning on the Effective Date.
|
||||
\item \textbf{Project Not An Agent Of Conservancy}. The \signatories
|
||||
hereby acknowledge that the Project and the \leadershipbody
|
||||
do not and shall not act as an agent for Conservancy unless specifically
|
||||
authorized in writing by Conservancy to do so.
|
||||
authorized in writing by Conservancy to do so.
|
||||
\end{enumerate}
|
||||
\item \textbf{Fees}. The \signatories agree to donate ten percent
|
||||
(10\%) of the Project's gross revenue (including, but not necessarily limited
|
||||
|
@ -161,7 +161,7 @@ is the intent of the Parties that this Agreement be interpreted to
|
|||
provide Conservancy with variance powers necessary to enable Conservancy
|
||||
to treat the Project Fund as Conservancy's asset in accordance with
|
||||
Financial Accounting Statement No. 136 issued by the Financial Accounting
|
||||
Standards Board, while this Agreement is in effect.
|
||||
Standards Board, while this Agreement is in effect.
|
||||
\item \textbf{Project Fund Management / Performance of Charitable Purposes}.
|
||||
\label{CharitablePurpose} All of the assets received by Conservancy
|
||||
under the terms of this Agreement shall be devoted to the purposes
|
||||
|
@ -176,7 +176,7 @@ to participate or intervene in any political campaign on behalf or
|
|||
in opposition to any candidate for public office, to induce or encourage
|
||||
violations of law or public policy, to cause any private inurement
|
||||
or improper private benefit to occur, nor to take any other action
|
||||
inconsistent with IRC Section 501(c)(3).
|
||||
inconsistent with IRC Section 501(c)(3).
|
||||
|
||||
\item \textbf{Representation of the Project in Conservancy}. \label{Representation}The
|
||||
\signatories, each a signatory hereto, hereby establish and comprise
|
||||
|
@ -265,28 +265,28 @@ Members and/or to increase the Committee composition to the required
|
|||
Minimum.
|
||||
|
||||
\item \textbf{An Elected Oversight Committee.} The \signatories, each
|
||||
a signatory hereto, shall initially [FIXME: form or comprise] the
|
||||
\leadershipbody as a Project Committee (``Committee'') to
|
||||
a signatory hereto, shall initially [FIXME: form or comprise] the
|
||||
\leadershipbody as a Project Committee (``Committee'') to
|
||||
represent the Project in its official communication with Conservancy. The
|
||||
Committee shall hereafter be elected by community members of the Project as
|
||||
designated by the Committee or a subcommittee of the Committee (the
|
||||
``Community Members'').
|
||||
designated by the Committee or a subcommittee of the Committee (the
|
||||
``Community Members'').
|
||||
|
||||
The positions on the Committee will be on a two-year staggered basis
|
||||
([FIX-ME: some portion] of the initial board seats will be for one year).
|
||||
The members of the Committee may be removed from the position at any time
|
||||
by a majority vote of the Community Members. Upon the resignation or
|
||||
removal of a member of the Oversight Board, the Community Members shall
|
||||
elect a replacement Community Member to serve on the Committee.
|
||||
The positions on the Committee will be on a two-year staggered basis
|
||||
([FIX-ME: some portion] of the initial board seats will be for one year).
|
||||
The members of the Committee may be removed from the position at any time
|
||||
by a majority vote of the Community Members. Upon the resignation or
|
||||
removal of a member of the Oversight Board, the Community Members shall
|
||||
elect a replacement Community Member to serve on the Committee.
|
||||
|
||||
The Committee will elect a single individual to communicate with
|
||||
Conservancy (the ``Representative'') and shall notify Conservancy promptly
|
||||
following the election of a new Representative. The Representative will
|
||||
The Committee will elect a single individual to communicate with
|
||||
Conservancy (the ``Representative'') and shall notify Conservancy promptly
|
||||
following the election of a new Representative. The Representative will
|
||||
have the authority to instruct Conservancy on the Project's behalf on all
|
||||
matters.
|
||||
matters.
|
||||
|
||||
This section may be modified by a vote of at least $\frac{3}{4}$ths of the
|
||||
Community Members, with the consent of Conservancy, such consent not to be
|
||||
This section may be modified by a vote of at least $\frac{3}{4}$ths of the
|
||||
Community Members, with the consent of Conservancy, such consent not to be
|
||||
unreasonably withheld.
|
||||
|
||||
|
||||
|
@ -299,7 +299,7 @@ project usually has a uniquely worded Representation section. ]
|
|||
|
||||
\item \textbf{Outstanding Liabilities}. The \signatories represent
|
||||
that any liabilities that may be outstanding in connection with the
|
||||
Project have been disclosed to Conservancy.
|
||||
Project have been disclosed to Conservancy.
|
||||
\item \textbf{Termination}. \label{Termination} The \leadershipbody or Conservancy
|
||||
may terminate this Agreement at any time subject to the following
|
||||
understandings:
|
||||
|
@ -315,20 +315,20 @@ following requirements (the ``Successor has Qualified''):
|
|||
|
||||
\begin{enumerate}[label=\roman*.,ref=\theenumi(\alph{enumii})(\roman*)]
|
||||
\item the Successor is another nonprofit corporation which is tax-exempt
|
||||
under IRC Section 501(c)(3),
|
||||
under IRC Section 501(c)(3),
|
||||
\item the Successor is not classified as a private foundation under Section
|
||||
509(a),
|
||||
\item the Successor is willing and able to sponsor the Project, and,
|
||||
509(a),
|
||||
\item the Successor is willing and able to sponsor the Project, and,
|
||||
\item the Successor has (a) communicated its willingness to sponsor the
|
||||
Project in writing to Conservancy and (b) sent a copy of its 501(c)(3) determination letter to Conservancy, and,
|
||||
Project in writing to Conservancy and (b) sent a copy of its 501(c)(3) determination letter to Conservancy, and,
|
||||
\item the Successor is approved in writing by both Parties by the end of
|
||||
the Notice Period, such approval not to be unreasonably withheld.
|
||||
the Notice Period, such approval not to be unreasonably withheld.
|
||||
\end{enumerate}
|
||||
\item \textbf{Additional Search Periods}. If the Parties cannot agree on
|
||||
a Successor to sponsor the Project, the \leadershipbody
|
||||
shall have an additional 60 days to find a Successor willing and able
|
||||
to sponsor the Project. Any subsequent search periods of any length
|
||||
shall only be granted at Conservancy's written permission.
|
||||
shall only be granted at Conservancy's written permission.
|
||||
\item \textbf{Transfer to a Successor}. If a Successor has Qualified, the balance
|
||||
of assets in the Project Fund, together with any other assets held
|
||||
or liabilities incurred by Conservancy in connection with the
|
||||
|
@ -339,8 +339,8 @@ that may be required.
|
|||
\item \textbf{Termination Without a Successor}. If no Successor is found,
|
||||
Conservancy may dispose of Project assets and liabilities
|
||||
in any manner consistent with applicable tax and charitable trust
|
||||
laws.
|
||||
\item \textbf{\signatories' Right to Terminate.}
|
||||
laws.
|
||||
\item \textbf{\signatories' Right to Terminate.}
|
||||
The \signatories hereby acknowledge that they will relinquish any
|
||||
rights to terminate separate from the \leadershipbody as
|
||||
of the Effective Date.
|
||||
|
@ -352,16 +352,16 @@ This Agreement shall be interpreted and construed in accordance with
|
|||
the laws of the State of New York. This Agreement constitutes the
|
||||
only agreement, and supersedes all prior agreements and understandings,
|
||||
both written and oral, among the Parties with respect to the subject
|
||||
matter hereof.
|
||||
matter hereof.
|
||||
\item \textbf{Amendments. }This Agreement may not be amended or modified,
|
||||
except in writing and signed by both Conservancy and the entirety of \leadershipbody.
|
||||
except in writing and signed by both Conservancy and the entirety of \leadershipbody.
|
||||
\item \textbf{Counterparts / Facsimile}. This Agreement may be executed
|
||||
in two or more counterparts, each of which shall constitute an original,
|
||||
but all of which, when together, shall constitute but one and the
|
||||
same instrument, and shall become effective when one or more counterparts
|
||||
have been signed by each Party hereto and delivered to the other Party.
|
||||
In lieu of the original, a facsimile transmission or copy of the original
|
||||
shall be as effective and enforceable as the original.
|
||||
shall be as effective and enforceable as the original.
|
||||
\end{enumerate}
|
||||
\vfill{}
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
google-site-verification: google536264c707362f55.html
|
||||
google-site-verification: google536264c707362f55.html
|
||||
|
|
|
@ -297,4 +297,4 @@
|
|||
<path style="fill:#ff6600;fill-opacity:1" d="m 103.38797,65.010543 c -0.057,2.18531 -3.865755,0.28296 -4.031245,2.78125 -4.22387,-1.88052 0.32884,2.87188 -0.0937,3.3125 l -0.0312,0 -0.3125,-0.0312 c -0.20386,-0.0728 -0.49977,-0.19904 -0.9375,-0.46875 -2.9499,2.35025 -3.02157,7.23369 -6.0625,9.9375 -1.99467,4.30504 -2.47977,8.98337 -3.9375,13.46875 -0.71796,4.30292 -1.34881,8.597857 -0.28125,12.906247 0.32053,3.50159 -0.68919,8.25865 2.5,10.71875 4.72728,3.88304 8.65575,8.79543 12.624995,13.46875 6.21914,7.65333 11.72948,15.86251 16.59375,24.4375 0.32431,-2.11756 1.10954,4.26459 2.53125,4.6875 -0.49161,-3.19231 -1.13213,-8.26328 -1.4375,-12.1875 -1.5814,-10.2909 -6.65305,-19.64903 -8.5625,-29.84375 -0.0587,-0.43037 -0.12809,-0.87203 -0.1875,-1.3125 l 0,-1.28125 -0.15625,0 c -0.62551,-5.04297 -0.8504,-10.46546 2.8125,-14.40625 3.73968,-3.772097 9.30633,-4.722447 13.8125,-7.343747 1.00194,-0.59119 2.04921,-1.07174 3.125,-1.40625 0.009,-0.003 0.0228,0.003 0.0312,0 3.11701,-0.96341 6.44862,-0.93323 9.6875,-0.40625 0.0479,0.008 0.10841,0.0233 0.15625,0.0312 0.29455,0.0493 0.61389,0.099 0.90625,0.15625 2.37136,0.21133 7.14463,1.13687 8,-0.5 -3.27225,-2.78631 -7.98526,-2.59211 -11.96875,-3.6875 -0.63059,-0.11469 -1.41182,-0.24041 -2.1875,-0.3125 l -3.90625,-0.875 -0.96875,-0.25 0,0.0312 -13.96875,-2.71875 c -0.22212,-0.20226 -0.46434,-0.40933 -0.6875,-0.5625 l 13.625,1.6875 0,-0.0625 c 0.48011,0.10699 0.95576,0.19361 1.4375,0.25 l 0,0.0312 9.625,1.78125 c 1.66103,0.61952 3.4322,1.08374 5.09375,1.1875 2.74263,0.39907 6.22526,4.49092 7.125,4.6875 -0.44096,-4.307 -4.7422,-6.23586 -8.3125,-7.5 -4.1712,-2.02803 -10.4023,-1.95417 -11.0625,-7.5625 -0.1756,-0.39076 -0.34902,-0.78118 -0.5625,-1.15625 l -1.625,-2.15625 0.0625,-0.0312 c -2.21724,-2.61691 -5.34011,-4.52196 -8.65625,-5.25 -3.2914,-1.13611 -6.98773,-2.2671 -10.46875,-2.71875 -1.18132,3.47826 -2.5031,-2.75561 -5.34375,-0.90625 -2.48996,0.29488 -2.14614,0.95256 -4,-0.625 z m 17.90625,10.15625 c 0.90187,-0.0238 1.93277,0.14208 2.96875,0.5 2.76259,0.95447 4.56151,2.96523 4.03125,4.5 -0.53026,1.53477 -3.20616,1.98572 -5.96875,1.03125 -2.76259,-0.95447 -4.5615,-2.93398 -4.03125,-4.46875 0.33141,-0.95923 1.49689,-1.52281 3,-1.5625 z" id="path3499-9-7" inkscape:connector-curvature="0"/>
|
||||
<text xml:space="preserve" style="font-size:95.54121399px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold" x="184.89412" y="166.37402" id="text4477" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan4479" x="184.89412" y="166.37402" style="fill:#000000;fill-opacity:1">EMU</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
@ -465,4 +465,4 @@
|
|||
transform="matrix(2.1910821,0,0,1.3005353,-703.58095,-489.37937)"
|
||||
id="g5539-5" /><g
|
||||
id="g4480-1-0"
|
||||
transform="matrix(1.8842212,0,0,1.1183954,-1334.0412,-1196.6312)" /></g></g></svg>
|
||||
transform="matrix(1.8842212,0,0,1.1183954,-1334.0412,-1196.6312)" /></g></g></svg>
|
||||
|
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
@ -489,4 +489,4 @@
|
|||
id="c_copy_3_2_"><g
|
||||
id="g210"><polygon
|
||||
points="614.3,204.9 614.3,204.9 663.1,251.1 677.4,236.7 643.2,203.6 677.4,168.9 662.8,154 613.4,204 "
|
||||
id="polygon212" /></g></g></g></g></svg>
|
||||
id="polygon212" /></g></g></g></g></svg>
|
||||
|
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
@ -34,4 +34,4 @@
|
|||
<path style="fill:#008460; fill-rule:evenodd;stroke:none;" d="M41.582 0.1152 C48.924 0 54.615 1.8555 59.746 4.0615 C61.051 4.623 62.302 5.1904 63.422 5.9258 C63.719 6.1211 64.511 6.5039 64.287 7.0077 C63.18 7.3007 61.767 6.8975 60.8 6.6836 C58.458 6.2598 56.114 5.8359 53.772 5.4121 C52.295 5.2422 50.817 5.0703 49.339 4.8984 C48.654 4.8721 47.97 4.8457 47.285 4.8184 C46.527 4.6973 45.475 4.7578 44.697 4.6973 C43.509 4.6025 41.851 4.6133 40.581 4.8184 C39.797 4.8809 39.013 4.9434 38.229 5.0078 C36.123 5.3711 34.082 5.5273 32.202 6.0889 C29.688 6.8389 27.356 7.6437 25.12 8.6287 C18.163 11.6957 12.229 17.0357 7.901 22.7657 C6.998 23.9627 6.037 25.1547 5.225 26.4427 C4.987 26.8197 4.495 27.9377 4.171 28.1457 C3.275 28.7187 1.545 29.0257 0.846 28.0647 C0.574 27.6897 0 26.2407 0.306 25.5237 C0.593 25.0647 0.882 24.6037 1.171 24.1447 C2.787 21.5817 4.681 19.3907 6.523 17.0897 C7.744 15.5647 9.191 14.0177 10.713 12.7927 C11.19 12.3497 11.668 11.9097 12.146 11.4667 C13.321 10.5317 14.476 9.5567 15.713 8.6837 C19.904 5.7246 24.629 3.5 30.12 1.8174 C32.522 1.082 35.081 0.832 37.824 0.3584 C39.076 0.2773 40.329 0.1953 41.582 0.1152 " transform="translate(272.014, 93.0293)"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
@ -118,4 +118,4 @@
|
|||
inkscape:connector-curvature="0"
|
||||
d="m 0,0 c 0,-2.396 1.941,-4.337 4.336,-4.337 2.398,0 4.339,1.941 4.339,4.337 0,2.396 -1.941,4.339 -4.339,4.339 C 1.941,4.339 0,2.396 0,0"
|
||||
style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path3438" /></g></g></g></svg>
|
||||
id="path3438" /></g></g></g></svg>
|
||||
|
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
|
@ -28,4 +28,4 @@
|
|||
<path fill="#000000" opacity="1.00" d=" M 105.00 39.95 C 111.94 32.23 126.21 33.62 131.49 42.58 C 134.25 46.86 134.47 52.10 134.57 57.03 C 126.25 57.04 117.93 57.02 109.61 57.04 C 109.97 59.71 109.91 62.89 112.23 64.75 C 116.01 68.24 122.69 66.86 124.81 62.14 C 127.92 62.11 131.03 62.12 134.15 62.13 C 131.04 72.38 118.02 76.98 108.77 72.22 C 103.52 69.60 100.72 63.77 100.23 58.13 C 99.64 51.82 100.61 44.83 105.00 39.95 M 109.73 50.65 C 114.70 50.66 119.66 50.68 124.63 50.64 C 124.59 46.06 120.82 41.57 115.96 42.38 C 111.79 42.72 110.31 47.15 109.73 50.65 Z" id="path40"/>
|
||||
<path fill="#000000" opacity="1.00" d=" M 163.72 35.86 C 169.76 34.66 176.85 34.20 182.17 37.82 C 187.50 41.88 185.59 49.27 185.94 55.03 C 186.48 60.81 184.24 67.60 188.56 72.36 C 184.89 72.73 181.19 72.53 177.51 72.56 C 177.15 71.36 176.82 70.16 176.51 68.95 C 173.24 72.22 168.65 74.78 163.88 73.90 C 159.80 73.47 155.70 70.78 154.67 66.65 C 153.46 62.09 154.47 56.33 158.76 53.71 C 163.50 50.70 169.43 51.15 174.58 49.35 C 177.03 48.30 177.22 44.39 174.67 43.34 C 170.75 41.72 164.47 42.47 164.07 47.71 C 161.00 47.73 157.94 47.73 154.87 47.71 C 155.19 42.46 158.32 37.11 163.72 35.86 M 163.83 60.91 C 162.68 66.21 169.80 67.68 173.20 65.15 C 176.55 63.00 176.49 58.61 176.66 55.10 C 172.53 56.99 165.47 55.65 163.83 60.91 Z" id="path42"/>
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
@ -34,7 +34,7 @@
|
|||
<path d="m -0.282,142.233 7.751,6.868 c 4.436,-2.285 9.825,-3.558 15.604,-3.448 6.706,-3.936 15.21,-5.969 24.287,-5.241 11.093,0.89 20.691,5.708 26.815,12.565 0.479,0.029 0.959,0.058 1.443,0.097 18.916,1.518 33.586,11.022 32.768,21.232 -0.819,10.208 -16.817,17.254 -35.733,15.737 -0.3,-0.025 -0.595,-0.057 -0.893,-0.084 -7.159,6.103 -17.662,9.539 -29.065,8.624 -10.282,-0.825 -19.277,-5.028 -25.416,-11.1 -9.716,-2.061 -17.361,-7.922 -20.222,-15.152 l -8.853,-4.542" id="path57" inkscape:connector-curvature="0" style="fill:url(#SVGID_2_)"/>
|
||||
<ellipse cx="71.473" cy="179.554" rx="5.4770002" ry="3.4790001" id="ellipse59" sodipodi:cx="71.473" sodipodi:cy="179.554" sodipodi:rx="5.4770002" sodipodi:ry="3.4790001" d="m 76.95,179.554 c 0,1.9214 -2.452137,3.479 -5.477,3.479 -3.024864,0 -5.477001,-1.5576 -5.477001,-3.479 0,-1.9214 2.452137,-3.479 5.477001,-3.479 3.024863,0 5.477,1.5576 5.477,3.479 z"/>
|
||||
<ellipse cx="72.315002" cy="162.595" rx="5.4759998" ry="3.4779999" id="ellipse61" sodipodi:cx="72.315002" sodipodi:cy="162.595" sodipodi:rx="5.4759998" sodipodi:ry="3.4779999" d="m 77.791002,162.595 c 0,1.92085 -2.451688,3.478 -5.476,3.478 -3.024311,0 -5.475999,-1.55715 -5.475999,-3.478 0,-1.92085 2.451688,-3.478 5.475999,-3.478 3.024312,0 5.476,1.55715 5.476,3.478 z"/>
|
||||
|
||||
|
||||
<path d="m 149.651,122.433 c 0,0 0,-0.004 0,-0.044 -0.001,-10.437 -3.399,-20.288 -8.892,-28.572 -8.285,-12.471 -20.906,-21.79 -35.708,-28.232 -14.858,-6.424 -32.154,-9.979 -50.622,-9.989 -24.62,0.038 -47.17,6.271 -64.615,17.398 -8.716,5.595 -16.216,12.502 -21.72,20.826 -5.493,8.282 -8.889,18.136 -8.891,28.573 0,0.03 0,0.056 0,0.078 0,0.042 0,0.067 0,0.077 10e-4,10.438 3.398,20.29 8.893,28.576 6.727,10.125 16.317,18.17 27.609,24.286 3.704,6.982 11.194,12.254 20.328,14.387 6.579,6.244 15.898,10.457 26.459,11.307 1.291,0.102 2.572,0.153 3.839,0.153 10.123,-0.002 19.396,-3.224 26.231,-8.683 1.755,0.136 3.484,0.203 5.183,0.203 8.646,-0.006 16.467,-1.712 22.428,-4.772 2.977,-1.536 5.501,-3.418 7.387,-5.674 1.377,-1.645 2.401,-3.518 2.944,-5.54 2.961,-1.494 5.813,-3.108 8.538,-4.846 8.714,-5.595 16.215,-12.5 21.719,-20.825 5.49,-8.282 8.888,-18.133 8.89,-28.569 0,-0.014 0,-0.041 0,-0.08 v -0.02 l 0,-0.018 z m -5.054,0.118 c 0,9.327 -3.043,18.223 -8.051,25.778 -5.045,7.633 -11.998,14.075 -20.229,19.359 -1.812,1.156 -3.689,2.256 -5.621,3.302 -0.43,-2.181 -1.402,-4.255 -2.767,-6.137 -2.831,-3.893 -7.297,-7.121 -12.814,-9.586 -0.559,-0.248 -1.131,-0.487 -1.711,-0.719 0.252,-0.106 0.511,-0.209 0.76,-0.316 11.106,-4.794 19.31,-11.416 23.75,-18.203 2.944,-4.485 4.349,-8.972 4.355,-13.547 -0.007,-4.598 -1.411,-9.085 -4.357,-13.573 -2.971,-4.515 -7.567,-8.968 -13.646,-12.862 -12.092,-7.791 -29.822,-13.058 -49.641,-13.07 -0.06,10e-4 -0.134,0 -0.22,10e-4 h -0.05 c -14.883,0.003 -28.607,2.936 -39.656,7.729 -11.114,4.796 -19.318,11.418 -23.758,18.205 -2.944,4.484 -4.348,8.972 -4.355,13.547 0.007,4.596 1.412,9.084 4.357,13.571 1.799,2.734 4.204,5.441 7.164,8.021 l -0.066,0.074 9.045,8.017 1.54,-0.793 c 3.873,-1.998 8.625,-3.176 13.759,-3.175 0.214,0 0.424,0.001 0.632,0.006 l 0.716,0.015 0.618,-0.362 c 5.39,-3.165 12.106,-5.04 19.375,-5.039 1.132,0 2.276,0.046 3.431,0.138 10.485,0.836 19.494,5.407 25.132,11.731 l 0.696,0.78 1.043,0.06 c 0.475,0.028 0.935,0.057 1.386,0.092 8.848,0.703 16.704,3.255 22.169,6.675 2.734,1.707 4.86,3.621 6.25,5.547 1.395,1.935 2.054,3.826 2.055,5.675 0,0.204 -0.007,0.408 -0.023,0.618 -0.143,1.731 -0.851,3.373 -2.187,4.984 -1.993,2.406 -5.458,4.621 -9.959,6.17 -4.497,1.554 -9.998,2.459 -15.974,2.458 -1.6,0 -3.234,-0.064 -4.893,-0.197 -0.254,-0.021 -0.539,-0.051 -0.858,-0.082 l -1.063,-0.1 -0.812,0.693 c -5.876,5.017 -14.366,8.17 -23.788,8.167 -1.133,0 -2.28,-0.046 -3.437,-0.138 -9.716,-0.776 -18.166,-4.759 -23.838,-10.378 l -0.528,-0.521 -0.726,-0.154 C 8.752,183.108 1.835,177.628 -0.594,171.401 l -0.35,-0.883 -9.7,-4.976 -1.151,2.243 1.045,-2.318 c -6.802,-4.833 -12.565,-10.544 -16.942,-17.14 -5.008,-7.553 -8.051,-16.451 -8.05,-25.78 0,-0.036 0,-0.036 0,-0.036 v -0.119 c -0.001,-9.329 3.041,-18.229 8.051,-25.782 5.045,-7.633 11.999,-14.075 20.229,-19.358 16.487,-10.527 38.125,-16.571 61.893,-16.603 17.815,0.008 34.445,3.447 48.608,9.572 14.139,6.153 25.908,14.94 33.507,26.39 5.008,7.554 8.051,16.45 8.049,25.777 0.001,0.014 0,0.054 0.001,0.12 v 0.043 z M 8.952,145.648 c -0.555,-0.331 -1.101,-0.666 -1.629,-1.008 -5.584,-3.571 -9.674,-7.601 -12.151,-11.38 -2.51,-3.866 -3.504,-7.223 -3.531,-10.801 0.026,-3.558 1.021,-6.914 3.534,-10.786 3.667,-5.66 11.143,-11.871 21.521,-16.324 l -0.999,-2.321 1.007,2.318 C 27.04,90.854 40.137,88.03 54.353,88.032 h 0.074 c 0.068,-10e-4 0.125,-10e-4 0.196,-10e-4 18.907,-0.01 35.836,5.106 46.907,12.268 5.584,3.569 9.673,7.602 12.152,11.38 2.51,3.866 3.504,7.222 3.531,10.802 -0.027,3.556 -1.021,6.914 -3.535,10.785 -3.667,5.659 -11.143,11.87 -21.521,16.323 -2.083,0.906 -4.284,1.738 -6.579,2.497 -3.089,-0.734 -6.359,-1.257 -9.761,-1.531 -0.16,-0.013 -0.318,-0.025 -0.475,-0.035 -6.619,-6.971 -16.495,-11.716 -27.783,-12.627 -1.29,-0.104 -2.57,-0.153 -3.836,-0.153 -7.868,0.001 -15.22,1.953 -21.317,5.379 -0.008,0 -0.016,0 -0.023,0 -4.819,0 -9.387,0.9 -13.431,2.529 z" id="path73" inkscape:connector-curvature="0"/>
|
||||
<path d="m -13.603,123.581 c 0,0 -7.094,-53.079 67.612,-53.079 53.5,0 58.977,19.589 67.824,48.234 0,0 -19.589,-33.912 -67.612,-33.841 -67.396,0.099 -67.824,38.686 -67.824,38.686 z" id="path75" inkscape:connector-curvature="0" style="opacity:0.3"/>
|
||||
<path d="m 100.138,158.756 c 0,0 5.752,2.723 17.529,-3.739 11.42,-6.266 15.534,4.363 21.228,-7.635 0,0 4.213,6.74 -30.509,26.925 -10e-4,0.001 -5.299,-12.601 -8.248,-15.551 z" id="path77" inkscape:connector-curvature="0" style="opacity:0.2"/>
|
||||
|
@ -98,4 +98,4 @@
|
|||
<path d="m 684.513,585.544 c 0.012,0.359 -0.252,0.647 -0.672,0.647 -0.371,0 -0.636,-0.288 -0.636,-0.647 0,-0.372 0.276,-0.66 0.66,-0.66 0.396,0 0.648,0.288 0.648,0.66 z m -1.175,7.435 v -5.805 h 1.055 v 5.805 h -1.055 z" id="path332" inkscape:connector-curvature="0" style="fill:#6d6d6d"/>
|
||||
<path d="m 686.001,591.9 c 0.312,0.203 0.863,0.42 1.392,0.42 0.768,0 1.127,-0.384 1.127,-0.864 0,-0.504 -0.3,-0.779 -1.079,-1.067 -1.044,-0.371 -1.535,-0.947 -1.535,-1.643 0,-0.936 0.756,-1.703 2.003,-1.703 0.588,0 1.104,0.168 1.427,0.359 l -0.264,0.768 c -0.228,-0.144 -0.647,-0.336 -1.188,-0.336 -0.623,0 -0.971,0.36 -0.971,0.792 0,0.479 0.348,0.695 1.103,0.983 1.008,0.384 1.523,0.888 1.523,1.751 0,1.02 -0.791,1.751 -2.171,1.751 -0.636,0 -1.223,-0.168 -1.631,-0.407 l 0.264,-0.804 z" id="path334" inkscape:connector-curvature="0" style="fill:#6d6d6d"/>
|
||||
</g>
|
||||
<path style="fill:url(#linearGradient4158);fill-opacity:1;stroke:none" d="m -39.411627,128.55903 c 3.648072,9.15888 32.9454945,17.49942 34.7403045,15.93868 0.0732,-3.93095 0.43679,-8.47093 0.43679,-8.47093 0,0 16.8971525,13.88296 22.5804825,19.05885 -5.14622,2.54814 -24.4402525,13.25297 -24.4402525,13.25297 l 0.41181,-7.58934 c 0,0 -36.2179295,-6.72378 -46.4783685,-11.38754 z" id="path3382" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/></svg>
|
||||
<path style="fill:url(#linearGradient4158);fill-opacity:1;stroke:none" d="m -39.411627,128.55903 c 3.648072,9.15888 32.9454945,17.49942 34.7403045,15.93868 0.0732,-3.93095 0.43679,-8.47093 0.43679,-8.47093 0,0 16.8971525,13.88296 22.5804825,19.05885 -5.14622,2.54814 -24.4402525,13.25297 -24.4402525,13.25297 l 0.41181,-7.58934 c 0,0 -36.2179295,-6.72378 -46.4783685,-11.38754 z" id="path3382" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/></svg>
|
||||
|
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
@ -297,4 +297,4 @@
|
|||
<path style="fill:#ff6600;fill-opacity:1" d="m 103.38797,65.010543 c -0.057,2.18531 -3.865755,0.28296 -4.031245,2.78125 -4.22387,-1.88052 0.32884,2.87188 -0.0937,3.3125 l -0.0312,0 -0.3125,-0.0312 c -0.20386,-0.0728 -0.49977,-0.19904 -0.9375,-0.46875 -2.9499,2.35025 -3.02157,7.23369 -6.0625,9.9375 -1.99467,4.30504 -2.47977,8.98337 -3.9375,13.46875 -0.71796,4.30292 -1.34881,8.597857 -0.28125,12.906247 0.32053,3.50159 -0.68919,8.25865 2.5,10.71875 4.72728,3.88304 8.65575,8.79543 12.624995,13.46875 6.21914,7.65333 11.72948,15.86251 16.59375,24.4375 0.32431,-2.11756 1.10954,4.26459 2.53125,4.6875 -0.49161,-3.19231 -1.13213,-8.26328 -1.4375,-12.1875 -1.5814,-10.2909 -6.65305,-19.64903 -8.5625,-29.84375 -0.0587,-0.43037 -0.12809,-0.87203 -0.1875,-1.3125 l 0,-1.28125 -0.15625,0 c -0.62551,-5.04297 -0.8504,-10.46546 2.8125,-14.40625 3.73968,-3.772097 9.30633,-4.722447 13.8125,-7.343747 1.00194,-0.59119 2.04921,-1.07174 3.125,-1.40625 0.009,-0.003 0.0228,0.003 0.0312,0 3.11701,-0.96341 6.44862,-0.93323 9.6875,-0.40625 0.0479,0.008 0.10841,0.0233 0.15625,0.0312 0.29455,0.0493 0.61389,0.099 0.90625,0.15625 2.37136,0.21133 7.14463,1.13687 8,-0.5 -3.27225,-2.78631 -7.98526,-2.59211 -11.96875,-3.6875 -0.63059,-0.11469 -1.41182,-0.24041 -2.1875,-0.3125 l -3.90625,-0.875 -0.96875,-0.25 0,0.0312 -13.96875,-2.71875 c -0.22212,-0.20226 -0.46434,-0.40933 -0.6875,-0.5625 l 13.625,1.6875 0,-0.0625 c 0.48011,0.10699 0.95576,0.19361 1.4375,0.25 l 0,0.0312 9.625,1.78125 c 1.66103,0.61952 3.4322,1.08374 5.09375,1.1875 2.74263,0.39907 6.22526,4.49092 7.125,4.6875 -0.44096,-4.307 -4.7422,-6.23586 -8.3125,-7.5 -4.1712,-2.02803 -10.4023,-1.95417 -11.0625,-7.5625 -0.1756,-0.39076 -0.34902,-0.78118 -0.5625,-1.15625 l -1.625,-2.15625 0.0625,-0.0312 c -2.21724,-2.61691 -5.34011,-4.52196 -8.65625,-5.25 -3.2914,-1.13611 -6.98773,-2.2671 -10.46875,-2.71875 -1.18132,3.47826 -2.5031,-2.75561 -5.34375,-0.90625 -2.48996,0.29488 -2.14614,0.95256 -4,-0.625 z m 17.90625,10.15625 c 0.90187,-0.0238 1.93277,0.14208 2.96875,0.5 2.76259,0.95447 4.56151,2.96523 4.03125,4.5 -0.53026,1.53477 -3.20616,1.98572 -5.96875,1.03125 -2.76259,-0.95447 -4.5615,-2.93398 -4.03125,-4.46875 0.33141,-0.95923 1.49689,-1.52281 3,-1.5625 z" id="path3499-9-7" inkscape:connector-curvature="0"/>
|
||||
<text xml:space="preserve" style="font-size:95.54121399px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold" x="184.89412" y="166.37402" id="text4477" sodipodi:linespacing="125%"><tspan sodipodi:role="line" id="tspan4479" x="184.89412" y="166.37402" style="fill:#000000;fill-opacity:1">EMU</tspan></text>
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
@ -14,4 +14,4 @@
|
|||
<path d="M 10204.26,9013.7324 C 13100.372,8264.3585 15233.852,8806.9996 17079.939,9370.0745" id="whiskerR1" style="fill:none;stroke:#000000;stroke-width:150"/>
|
||||
<path d="M 10323.04,9605.8225 C 12979.09,9406.498 14556.098,9477.3417 16605.723,11028.471" id="whiskerR2" style="fill:none;stroke:#000000;stroke-width:150"/>
|
||||
<path d="M 10323.04,10553.348 C 12342.144,10299.784 13208.104,10377.136 14590.985,11621.467" id="whiskerR3" style="fill:none;stroke:#000000;stroke-width:150"/>
|
||||
</svg>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 3 KiB After Width: | Height: | Size: 3 KiB |
|
@ -29,4 +29,4 @@
|
|||
<path fill="#969696" d="M404.946,44.997c0-2.808,1.646-4.55,4.26-4.55s4.26,1.743,4.26,4.55v25.07h0.192 c2.227-3.194,6.97-6.969,13.745-6.969c13.941,0,21.975,12.681,21.975,26.33s-8.033,26.331-21.975,26.331 c-6.775,0-11.324-2.421-13.745-7.068h-0.192v2.518c0,2.808-1.646,4.551-4.26,4.551s-4.26-1.743-4.26-4.551V44.997z M426.727,108.4 c10.453,0,14.131-10.26,14.131-18.972c0-8.712-3.678-18.973-14.131-18.973c-10.455,0-14.135,10.261-14.135,18.973 C412.592,98.141,416.272,108.4,426.727,108.4z"/>
|
||||
<path fill="#969696" d="M481.999,63.098c7.066,0,17.135,3.775,17.135,9.099c0,1.839-1.26,3.484-3.873,3.484 c-3.678,0-5.13-5.227-13.262-5.227c-4.84,0-9.002,2.129-9.002,6.485c0,9.002,27.491,8.035,27.491,22.941 c0,10.746-9.196,15.877-18.778,15.877c-10.843,0-19.361-5.422-19.361-9.779c0-2.321,1.646-3.87,3.484-3.87 c3.775,0,6.873,6.291,16.166,6.291c6.195,0,9.971-3.484,9.971-6.97c0-10.066-27.491-9.486-27.491-23.812 C464.478,68.132,473.383,63.098,481.999,63.098z"/>
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
|
@ -57,4 +57,4 @@
|
|||
id="path2300"
|
||||
d="m 37.083999,35.4 -0.094,-1.969 4.312,-2.062 0,0.938 -4.218,3.093 z"
|
||||
style="fill:#ffffff;fill-rule:nonzero;stroke:none"
|
||||
inkscape:connector-curvature="0" /></svg>
|
||||
inkscape:connector-curvature="0" /></svg>
|
||||
|
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
@ -43,4 +43,4 @@
|
|||
<stop offset="1" stop-color="#8DCDFC" stop-opacity="0.24" id="stop41"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
@ -1090,4 +1090,4 @@
|
|||
transform="matrix(1.2941148,0,0,1.2941148,1726.8994,-500.84696)"><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3274"
|
||||
d="m -1008.5625,872.02908 6.4688,0 3.60933,14.74219 c 0.35936,1.31251 0.64842,3.14845 0.86718,5.50781 l 0.14063,0 c 0.0156,-0.37499 0.0859,-1.04296 0.21094,-2.0039 0.12498,-0.96093 0.22655,-1.71484 0.30468,-2.26172 0.0781,-0.54687 1.15624,-5.87499 3.23438,-15.98438 l 6.5625,0 -7.47656,27.98438 c -0.90627,3.43749 -2.10939,5.90624 -3.60938,7.40625 -1.50001,1.49999 -3.5,2.24999 -6,2.25 -1.2344,-10e-6 -2.3359,-0.13283 -3.3047,-0.39844 l 0,-5.22656 c 0.6406,0.18749 1.3594,0.28124 2.1563,0.28125 2.0937,-10e-6 3.4687,-1.37501 4.125,-4.125 l 0.4453,-1.64063 z" /></g></g></g></g></g></svg>
|
||||
d="m -1008.5625,872.02908 6.4688,0 3.60933,14.74219 c 0.35936,1.31251 0.64842,3.14845 0.86718,5.50781 l 0.14063,0 c 0.0156,-0.37499 0.0859,-1.04296 0.21094,-2.0039 0.12498,-0.96093 0.22655,-1.71484 0.30468,-2.26172 0.0781,-0.54687 1.15624,-5.87499 3.23438,-15.98438 l 6.5625,0 -7.47656,27.98438 c -0.90627,3.43749 -2.10939,5.90624 -3.60938,7.40625 -1.50001,1.49999 -3.5,2.24999 -6,2.25 -1.2344,-10e-6 -2.3359,-0.13283 -3.3047,-0.39844 l 0,-5.22656 c 0.6406,0.18749 1.3594,0.28124 2.1563,0.28125 2.0937,-10e-6 3.4687,-1.37501 4.125,-4.125 l 0.4453,-1.64063 z" /></g></g></g></g></g></svg>
|
||||
|
|
Before Width: | Height: | Size: 269 KiB After Width: | Height: | Size: 269 KiB |
|
@ -1224,4 +1224,4 @@
|
|||
style="fill:#afe478;fill-opacity:1;stroke:none"
|
||||
d="M 0 0 L 0 180 L 315 180 L 315 0 L 0 0 z M 3.46875 3.625 L 311.53125 3.625 L 311.53125 176.375 L 3.46875 176.375 L 3.46875 3.625 z "
|
||||
transform="matrix(1.8842212,0,0,1.1183954,-17.575647,112.68656)"
|
||||
id="rect7534" /></g></g></g></svg>
|
||||
id="rect7534" /></g></g></g></svg>
|
||||
|
|
Before Width: | Height: | Size: 272 KiB After Width: | Height: | Size: 272 KiB |
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2012-2013 Denver Gingerich,
|
||||
/* Copyright (C) 2012-2013 Denver Gingerich,
|
||||
** Copyright (C) 2013-2014, 2020 Bradley M. Kuhn,
|
||||
** Copyright (C) 2016, 2020 Brett Smith.
|
||||
** License: GPLv3-or-later
|
||||
|
|
|
@ -6,4 +6,3 @@ from .models import Supporter
|
|||
@admin.register(Supporter)
|
||||
class SupporterAdmin(admin.ModelAdmin):
|
||||
list_display = ('display_name', 'display_until_date')
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ strategies that defend FOSS (such as copyleft). <a href="/about" class="orange">
|
|||
<section class="mh0 pa3 bg-light-blue ba b--gray">
|
||||
<video style="height: auto;" controls="" poster="/videos/sfc-introduction-video_poster.jpg">
|
||||
<source src="/videos/sfc-introduction_1080p.mp4" />
|
||||
<track src="/docs/sfc-introduction-vtt-captions.txt" kind="subtitles" srclang="en" label="English" />
|
||||
<track src="{% static 'docs/sfc-introduction-vtt-captions.txt' %}" kind="subtitles" srclang="en" label="English" />
|
||||
<a href="/videos/sfc-introduction_1080p.mp4"><img src="/videos/sfc-introduction-video_poster.jpg" alt="Software Freedom Conservancy introduction video"></a><br/>
|
||||
<a href="https://youtu.be/yCCxMfW0LTM">(watch on Youtube)</a>
|
||||
</video>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.contrib import admin
|
||||
|
||||
from .emails import make_candidate_email
|
||||
from .models import Candidate, Comment
|
||||
from .models import Candidate, Comment, SourceOffer
|
||||
|
||||
|
||||
class CommentInline(admin.TabularInline):
|
||||
|
@ -36,3 +36,10 @@ class CandidateAdmin(admin.ModelAdmin):
|
|||
# Announce the new candidate
|
||||
email = make_candidate_email(obj, request.user)
|
||||
email.send()
|
||||
|
||||
|
||||
@admin.register(SourceOffer)
|
||||
class SourceOfferAdmin(admin.ModelAdmin):
|
||||
list_display = ['time', 'vendor', 'device']
|
||||
fields = ['time', 'vendor', 'device', 'photo']
|
||||
readonly_fields = ['time']
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django import forms
|
||||
|
||||
from .models import Comment
|
||||
from .models import Comment, SourceOffer
|
||||
|
||||
|
||||
class CommentForm(forms.ModelForm):
|
||||
|
@ -17,3 +17,14 @@ class CommentForm(forms.ModelForm):
|
|||
|
||||
class DownloadForm(forms.Form):
|
||||
agree = forms.BooleanField(label="I understand that the goal of this process is to determine compliance with FOSS licenses, and that in downloading the source code candidate and/or firmware image, I am assisting SFC as a volunteer to investigate that question. I, therefore, promise and represent that I will not copy, distribute, modify, or otherwise use this source code candidate and/or firmware image for any purpose other than to help SFC evaluate the source code candidate for compliance with the terms of FOSS licenses, including but not limited to any version of the GNU General Public License. Naturally, if I determine in good faith that portions of the source code candidate and/or firmware image are subject to a FOSS license and are compliant with it, I may copy, distribute, modify, or otherwise use those portions in accordance with the FOSS license, and I take full responsibility for that determination and subsequent use.")
|
||||
|
||||
|
||||
class SourceOfferForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = SourceOffer
|
||||
fields = ['vendor', 'device', 'photo']
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['photo'].widget.attrs['capture'] = 'camera'
|
||||
self.fields['photo'].widget.attrs['accept'] = 'image/*'
|
||||
|
|
30
conservancy/usethesource/migrations/0009_sourceoffer.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Generated by Django 4.2.11 on 2024-07-22 08:59
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('usethesource', '0008_comment_attribute_to'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='SourceOffer',
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name='ID',
|
||||
),
|
||||
),
|
||||
('vendor', models.CharField(max_length=50, verbose_name='Vendor name')),
|
||||
('device', models.CharField(max_length=50, verbose_name='Device name')),
|
||||
('photo', models.ImageField(upload_to='usethesource/offers')),
|
||||
],
|
||||
),
|
||||
]
|
18
conservancy/usethesource/migrations/0010_sourceoffer_time.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 4.2.11 on 2024-07-29 09:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('usethesource', '0009_sourceoffer'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='sourceoffer',
|
||||
name='time',
|
||||
field=models.DateTimeField(auto_now_add=True, null=True),
|
||||
),
|
||||
]
|
|
@ -67,3 +67,13 @@ class Comment(models.Model):
|
|||
|
||||
class Meta:
|
||||
ordering = ['id']
|
||||
|
||||
|
||||
class SourceOffer(models.Model):
|
||||
time = models.DateTimeField(auto_now_add=True, null=True)
|
||||
vendor = models.CharField('Vendor name', max_length=50)
|
||||
device = models.CharField('Device name', max_length=50)
|
||||
photo = models.ImageField(upload_to='usethesource/offers')
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.vendor} {self.device}'
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<p>One crucial way to get involved is to let us know about any source candidates you find! Many devices have an offer for source code (check the manual or device's user interface to find it) and we'd be very interested to know what they send you when you request it. Here are the steps to submit a new source candidate to list on this page:</p>
|
||||
|
||||
<ol class="pl4">
|
||||
<li class="mb2">find a source candidate offered by a company - normally this is offered to you in the manual or user interface of your device, through a link or email address (the company's GitHub page is not canonical, unless they explicitly say so in this offer)</li>
|
||||
<li class="mb2">find a source candidate offered by a company - normally this is offered to you in the manual or user interface of your device, through a link or email address (the company's GitHub page is not canonical, unless they explicitly say so in this offer). If you're curious what an offer is, check out the PDFs referenced in <a href="https://sfconservancy.org/blog/2022/dec/21/energyguide-software-repair-label/">our submission to the FTC</a>, and <a href="{% url 'usethesource:upload_offer' %}">submit a picture/image of a new offer</a> so we can test it for you if you like</li>
|
||||
|
||||
<li class="mb2"><a href="https://usl-upload.sfconservancy.org/s/4Ykmx7rSGMJ7s43">upload the source candidate</a> to us - write down the file name(s) you uploaded for the next step (can be multiple), and upload a firmware image if you have it and are ok with us publishing it</li>
|
||||
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
{% extends "usethesource/base.html" %}
|
||||
|
||||
{% block title %}Upload an offer for source - Software Freedom Conservancy{% endblock %}
|
||||
|
||||
{% block head %}
|
||||
{{ block.super }}
|
||||
<script src="https://unpkg.com/htmx.org@1.9.6"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{{ block.super }}
|
||||
|
||||
<section class="mt4 mb3">
|
||||
<h2 class="f2 lh-title ttu mt0">Upload an offer for source</h2>
|
||||
</section>
|
||||
|
||||
<form id="form" hx-encoding="multipart/form-data" hx-post="{% url 'usethesource:upload_offer' %}">
|
||||
{% csrf_token %}
|
||||
{{ form.non_field_errors }}
|
||||
<div class="mv2">
|
||||
{{ form.vendor.errors }}
|
||||
<label for="{{ form.vendor.id_for_label }}" class="db mb1">Vendor:</label>
|
||||
{{ form.vendor }}
|
||||
</div>
|
||||
<div class="mv2">
|
||||
{{ form.device.errors }}
|
||||
<label for="{{ form.device.id_for_label }}" class="db mb1">Device:</label>
|
||||
{{ form.device }}
|
||||
</div>
|
||||
<div class="mv2">
|
||||
{{ form.photo.errors }}
|
||||
<label for="{{ form.photo.id_for_label }}" class="db mb1">Photo:</label>
|
||||
{{ form.photo }}
|
||||
</div>
|
||||
<progress id="progress" class="htmx-indicator" value="0" max="100"></progress>
|
||||
<div class="mv1">
|
||||
<button type="submit" class="white bg-green b db pv2 ph3 bn mb2">Send</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
form = document.querySelector('#form');
|
||||
let progress = document.querySelector('#progress');
|
||||
form.addEventListener('htmx:xhr:progress', function(evt) {
|
||||
console.log('progress', evt.detail.loaded/evt.detail.total * 100);
|
||||
progress.value = evt.detail.loaded/evt.detail.total * 100;
|
||||
});
|
||||
</script>
|
||||
{% endblock content %}
|
|
@ -0,0 +1 @@
|
|||
<p>Thanks! We've received your offer for source.</p>
|
|
@ -13,4 +13,5 @@ urlpatterns = [
|
|||
path('delete-comment/<int:comment_id>/<show_add>/', views.delete_comment, name='delete_comment'),
|
||||
path('add-button/<slug:slug>/', views.add_button, name='add_button'),
|
||||
path('ccirt-process/', views.ccirt_process, name='ccirt_process'),
|
||||
path('offer/', views.upload_offer, name='upload_offer'),
|
||||
]
|
||||
|
|
|
@ -3,7 +3,7 @@ from django.core.exceptions import PermissionDenied
|
|||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
|
||||
from .models import Candidate, Comment
|
||||
from .forms import CommentForm, DownloadForm
|
||||
from .forms import CommentForm, DownloadForm, SourceOfferForm
|
||||
from .emails import make_comment_email
|
||||
|
||||
|
||||
|
@ -91,3 +91,21 @@ def add_button(request, slug):
|
|||
|
||||
def ccirt_process(request):
|
||||
return render(request, 'usethesource/ccirt_process.html', {})
|
||||
|
||||
|
||||
def handle_uploaded_file(f):
|
||||
with open("some/file/name.txt", "wb+") as destination:
|
||||
for chunk in f.chunks():
|
||||
destination.write(chunk)
|
||||
|
||||
def upload_offer(request):
|
||||
if request.method == 'POST':
|
||||
form = SourceOfferForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return render(request, 'usethesource/upload_success_partial.html')
|
||||
else:
|
||||
return render(request, 'usethesource/upload_offer.html', {'form': form})
|
||||
else:
|
||||
form = SourceOfferForm()
|
||||
return render(request, 'usethesource/upload_offer.html', {'form': form})
|
||||
|
|
|
@ -6,4 +6,3 @@ from .models import EarthLocation
|
|||
@admin.register(EarthLocation)
|
||||
class EarthLocationAdmin(admin.ModelAdmin):
|
||||
list_display = ("label", "html_map_link")
|
||||
|
||||
|
|
|
@ -26,4 +26,3 @@ class EarthLocation(models.Model):
|
|||
def html_map_link(self): # for Admin, fixme: fix_ampersands
|
||||
return '<a href="%s">map link</a>' % self.default_map_link()
|
||||
html_map_link.allow_tags = True
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@
|
|||
# content: |-
|
||||
# # After updating, run `sudo postmap hash:/etc/postfix/sasl_passwd`.
|
||||
# [mail.sfconservancy.org]:587 conference@sfconservancy.org:PASSWORD
|
||||
|
||||
|
||||
- name: Configure Postfix for relaying
|
||||
copy:
|
||||
src: postfix/main.cf
|
||||
|
|
|
@ -49,4 +49,4 @@ inet_protocols = all
|
|||
# Relay authentication
|
||||
smtp_sasl_auth_enable = yes
|
||||
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
|
||||
smtp_sasl_security_options = noanonymous
|
||||
smtp_sasl_security_options = noanonymous
|
||||
|
|
18
pyproject.toml
Normal file
|
@ -0,0 +1,18 @@
|
|||
[tool.black]
|
||||
skip-string-normalization = true
|
||||
line-length = 90
|
||||
|
||||
[tool.isort]
|
||||
profile = "black"
|
||||
force_sort_within_sections = true
|
||||
line_length = 90
|
||||
sections = "FUTURE,STDLIB,THIRDPARTY,LOCALFOLDER,FIRSTPARTY"
|
||||
no_lines_before = "FIRSTPARTY"
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
DJANGO_SETTINGS_MODULE = 'conservancy.settings.dev'
|
||||
python_files = ['test*.py']
|
||||
# pytest-django will default to running tests with DEBUG = False, regardless of
|
||||
# the settings you provide it. This fails due to the
|
||||
# `ManifestStaticFilesStorage` without explicitly running `collectstatic` first.
|
||||
django_debug_mode = true
|
|
@ -4,4 +4,4 @@ Django==4.2.11
|
|||
beautifulsoup4==4.11.2
|
||||
html5lib==1.1
|
||||
django-countries==7.3.2
|
||||
Pillow==9.4.0
|
||||
Pillow==9.4.0
|
||||
|
|