Compare commits
34 Commits
795a794430
...
7025589597
Author | SHA1 | Date | |
---|---|---|---|
7025589597 | |||
c7c8990fb0 | |||
e10b91429e | |||
f4a17fd77f | |||
f0f2932187 | |||
03f7385389 | |||
af9d4aa82b | |||
643fca5d06 | |||
42de59f96f | |||
8bf1201888 | |||
c7cfada2eb | |||
d922f01df1 | |||
e602555567 | |||
b9a87a61f6 | |||
583261cc48 | |||
583fee3997 | |||
1e0e4339f6 | |||
6a258aa00d | |||
e63c9d2dcd | |||
307f6e4a27 | |||
b92d0e46d1 | |||
40da90f5ee | |||
07ac759411 | |||
ed822f0a0f | |||
17efde8549 | |||
748a501877 | |||
86c0d348d5 | |||
bb2439c74e | |||
f5c739679e | |||
177d2f630c | |||
c759f9e631 | |||
52639410e5 | |||
21c5a0a1a5 | |||
a6cbc5512f |
4
.well-known/matrix/server
Normal file
4
.well-known/matrix/server
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"m.server": "goulash.lezzo.org:443"
|
||||||
|
}
|
||||||
|
|
@ -156,6 +156,8 @@ summary {
|
|||||||
|
|
||||||
table {
|
table {
|
||||||
/* multiple borders merge */
|
/* multiple borders merge */
|
||||||
|
table-layout: fixed;
|
||||||
|
width: 100%;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
@ -164,6 +166,9 @@ tbody>tr:nth-child(odd) {
|
|||||||
/* set background of odd cells */
|
/* set background of odd cells */
|
||||||
background: var(--gray);
|
background: var(--gray);
|
||||||
}
|
}
|
||||||
|
td{
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
td,
|
td,
|
||||||
th {
|
th {
|
||||||
|
@ -36,7 +36,7 @@ body { width: 100%; height: 100%; }
|
|||||||
Un blog.<br>Come negli anni 2000.<br>Con molte meno speranze, e molte più feels.
|
Un blog.<br>Come negli anni 2000.<br>Con molte meno speranze, e molte più feels.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<p><br>=^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^=<br></p>
|
<p><br>=^..^= =^..^= =^..^= =^..^= =^..^= =^..^=<br></p>
|
||||||
<br><em>What a beautiful face<br>
|
<br><em>What a beautiful face<br>
|
||||||
I have found in this place<br>
|
I have found in this place<br>
|
||||||
That is circling all round the sun<br>
|
That is circling all round the sun<br>
|
||||||
@ -46,19 +46,20 @@ In a blink of an eye and be gone from me<br>
|
|||||||
Soft and sweet<br>
|
Soft and sweet<br>
|
||||||
Let me hold it close and keep it here with me<br></em>
|
Let me hold it close and keep it here with me<br></em>
|
||||||
</p>
|
</p>
|
||||||
<p><br>=^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^=<br></p>
|
<p><br>=^..^= =^..^= =^..^= =^..^= =^..^= =^..^=<br></p>
|
||||||
<p>
|
<p>
|
||||||
<br>
|
<br>
|
||||||
Articoli:
|
Articoli:
|
||||||
<ul>
|
<ul>
|
||||||
<li>█ <a href="bsg.html">Battlestar Galactica: a guide for watching the show</a></li>
|
<li>█ <a href="theoffice.html">The Office: a guide to navigate the media</a></li>
|
||||||
<li>█ <a href="primer.html">Capire il film Primer</a></li>
|
|
||||||
<li>█ <a href="memefinance.html">MEMEFINANCE (WIP)</a></li>
|
|
||||||
<li>█ <a href="capodanno22.html">Capodanno 2022</a></li>
|
|
||||||
<li>█ <a href="capodanno23.html">Capodanno 2022 + 1</a></li>
|
<li>█ <a href="capodanno23.html">Capodanno 2022 + 1</a></li>
|
||||||
|
<li>█ <a href="capodanno22.html">Capodanno 2022</a></li>
|
||||||
|
<li>█ <a href="memefinance.html">MEMEFINANCE (WIP)</a></li>
|
||||||
|
<li>█ <a href="primer.html">Capire il film Primer</a></li>
|
||||||
|
<li>█ <a href="bsg.html">Battlestar Galactica: a guide for watching the show</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
<p><br>=^..^= =^..^= =^..^= =^..^= =^..^= =^..^= =^..^=<br></p>
|
<p><br>=^..^= =^..^= =^..^= =^..^= =^..^= =^..^=<br></p>
|
||||||
<p>
|
<p>
|
||||||
<br>
|
<br>
|
||||||
I membri di lezzo possono leggere direttamente il sorgente org-mode degli articoli che solitamente contiene maggiori informazioni. Per fare questo basta modificare la url in: /blog/src/nomefile.org .
|
I membri di lezzo possono leggere direttamente il sorgente org-mode degli articoli che solitamente contiene maggiori informazioni. Per fare questo basta modificare la url in: /blog/src/nomefile.org .
|
||||||
|
198
blog/src/theoffice.org
Normal file
198
blog/src/theoffice.org
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
#+AUTHOR: bparodi
|
||||||
|
#+TITLE: The Office: a guide to navigate the media
|
||||||
|
#+options: html-style:nil html-scripts:nil date:nil created:nil
|
||||||
|
#+HTML_HEAD: <link rel="stylesheet" href="articles.css">
|
||||||
|
* Le due edizioni
|
||||||
|
Su lezzo puoi vedere due versioni di The Office:
|
||||||
|
- l'originale, trasferita da un misto dei miei bluray e da Amazon
|
||||||
|
- la versione superfan di Peacock, un altro servizio di streaming
|
||||||
|
The Office ha avuto più successo negli ultimi anni grazie allo streaming on
|
||||||
|
demand piuttosto che quando era trasmessa in TV.
|
||||||
|
|
||||||
|
Per questo motive quando Peacock è diventato l'esclusiva piattaforma di
|
||||||
|
streaming di The Office negli Stati Uniti
|
||||||
|
hanno capite che avrebbero dovuto offrire qualcosa di più per convincere alcuni fan a seguire la serie anziché
|
||||||
|
semplicemente acquistarla nelle molteplici edizioni in DVD e Bluray che ormai
|
||||||
|
sono economicissime.
|
||||||
|
Queste versioni estese degli episodi, chiamate Superfan Edits o Superfan Edition
|
||||||
|
offrono sequenze mai viste e in
|
||||||
|
alcuni casi addirittura mai trasmesse.
|
||||||
|
|
||||||
|
A prima vista, sembra un'aggiunta non particolarmente entusiasmante, ma in
|
||||||
|
realtà è un po' più interessante rispetto alla prima serie di Episodi Superfan
|
||||||
|
della terza stagione. Questo perché alcuni degli episodi estesi (chiamati a
|
||||||
|
volte montaggi del produttore) dalla terza stagione in poi sono stati
|
||||||
|
disponibili su DVD. La versione superfan aggiunge moltissimo spessore agli
|
||||||
|
episodi e rispondono ad alcune domande che i fan si sono posti per anni. Nella
|
||||||
|
prossima sezione ho copiato un articolo che parla di come la versione superfan
|
||||||
|
della terza stagione, nonchè la prima stagione ad essere sottoposta a questo
|
||||||
|
edit, arricchisca la visione della serie.
|
||||||
|
|
||||||
|
** The Office superfan episodes completely Change season 3 [SPOILER]
|
||||||
|
When Peacock first announced that it would be adding The Office to its library
|
||||||
|
with new Superfan episodes, I was as excited as anyone else. Who doesn’t want an
|
||||||
|
extra deranged rant from Dwight or a “That’s what she said” joke from Michael?
|
||||||
|
What I never expected was for them to change my perception of Dunder Mifflin,
|
||||||
|
forever. The Office’s extended cut episodes don’t merely add depth to
|
||||||
|
Season 3. They rewrite them.
|
||||||
|
|
||||||
|
At the moment Peacock’s extended episodes are only available for Season 3 of the
|
||||||
|
series. But that one season makes a great argument for why the streaming service
|
||||||
|
should keep adding these new installments. I’ve only made it through six
|
||||||
|
episodes of painstakingly tracking everything new in The Office’s Superfan cuts,
|
||||||
|
but already I’m viewing characters I love in a different light.
|
||||||
|
|
||||||
|
These apply to big, overarching plot points. Did you ever think it was weird
|
||||||
|
that Pam (Jenna Fischer) got back together with Roy (David Denman) after going
|
||||||
|
on basically one date with another guy? In the typical cut of The Office, Pam’s
|
||||||
|
choice to return to Roy seems a bit sad. It’s as if she’s resigned herself to a
|
||||||
|
lackluster fate she knows she hates. Yet it doesn’t play out that way in the
|
||||||
|
extended cut. We get to see more of Pam’s date with the cartoonist and her tiny
|
||||||
|
fling with that cute guy she danced with during “Diwali.” But more importantly
|
||||||
|
we get to see more of Roy and Pam. We see the breaks Roy keeps taking in the
|
||||||
|
hopes he can see the woman who broke his heart, and we see more of their quiet
|
||||||
|
flirting. It’s easy to write off Roy as an unemotional jerk. But in these small
|
||||||
|
moments it’s clear that he and Pam really had something.
|
||||||
|
|
||||||
|
Similarly, Jim’s (John Krasinski) relationship with Karen (Rashida Jones) feels
|
||||||
|
like more than a rebound. When Jim first transfers to Stamford, he’s pretty
|
||||||
|
insufferable. He’s constantly volunteering for more responsibility from Josh
|
||||||
|
(Charles Esten) and copying his boss, down to Josh’s bike riding hobby. We see a
|
||||||
|
bit of that in the traditional cut, but in this longer version Karen
|
||||||
|
consistently berates Jim for his overeager attitude and love of calling himself
|
||||||
|
Assistant Regional Manager. Yes, that is the same gimmick Jim used to pull on
|
||||||
|
Dwight. In this way she acts more as the anti-Pam, not a quiet nice girl but an
|
||||||
|
upfront go-getter who is unafraid to call Jim out on his nonsense. And Jim
|
||||||
|
responds to that reality check.
|
||||||
|
|
||||||
|
On the flip side, as these episodes spend more time with Karen we get to see
|
||||||
|
just how cutting and borderline cruel she can be. During “Gay Witch Hunt” Karen
|
||||||
|
walks by a co-worker who is breastfeeding at her desk. In disgust Karen says,
|
||||||
|
“Put that away. No one wants to see your udder.” That more insulting version of
|
||||||
|
Karen’s typical snark speaks volumes. It foreshadows how she will come to handle
|
||||||
|
her eventual breakup with Jim.
|
||||||
|
|
||||||
|
Less crucial romances also gain more dimension. In “Diwali” Ryan (BJ Novak)
|
||||||
|
initially pressures his co-workers to go to the celebration because it would
|
||||||
|
make Kelly (Mindy Kaling) happy. He later bails when it becomes clear her
|
||||||
|
parents are expecting him to ask for permission to marry Kelly. Is Ryan still
|
||||||
|
scum? Absolutely. But in this version he comes across more as a clueless guy in
|
||||||
|
love who can’t bring himself to take the next step. Also, did you know that
|
||||||
|
Angela (Angela Kinsey) was jealous of Kelly between Seasons 2 and 3? During the
|
||||||
|
Season 2 Christmas party, Kelly kissed Dwight (Rainn Wilson) because they were
|
||||||
|
both standing under mistletoe. Of course that’s something the vicious Angela
|
||||||
|
would never forget. Yet that entire plot line and Dwight’s admittedly sweet
|
||||||
|
reconciliation with Angela was cut.
|
||||||
|
|
||||||
|
This re-evaluation isn’t limited to the show’s romantic relationships. Though
|
||||||
|
Jan’s (Melora Hardin) monitoring of Michael’s (Steve Carell) work performance is
|
||||||
|
mentioned throughout all cuts of the season, only the Superfan edition truly
|
||||||
|
emphasizes how close Michael was to getting fired. In several episodes Jan
|
||||||
|
forces Michael to walk her through his workday on an hour-by-hour basis. During
|
||||||
|
this evaluation period we get a glimpse of what makes Michael Scott an actually
|
||||||
|
good boss. After slacking off on pretzel day, Michael suddenly bursts into the
|
||||||
|
main room in a sugar-fueled mania. Over the course of about two minutes he
|
||||||
|
spouts off several non-insane ideas about how to make the office more efficient,
|
||||||
|
including a desk reorganization and increased accountability from his
|
||||||
|
employees. He then returns to his desk to presumably make the major sale
|
||||||
|
mentioned at the end of the episode. It isn’t until Season 5 and the Michael
|
||||||
|
Scott Paper Company that it’s revealed that Michael may be good at his job. Yet
|
||||||
|
those seeds were planted two seasons prior then cut out of the script.
|
||||||
|
|
||||||
|
And then there’s the bird funeral. Pam’s obsession over organizing a funeral for
|
||||||
|
a dead bird in “Grief Counseling” has always given me pause. I chalked her
|
||||||
|
interest up to sheer boredom, though that never seemed quite right. Now I
|
||||||
|
understand what I was missing. While reflecting on the death of Ed Truck Pam
|
||||||
|
tells the camera, “Michael once told me that Home Alone is the saddest movie
|
||||||
|
ever. When I asked him why he said, ‘Because the whole family forgets the kid at
|
||||||
|
home. There is nothing funny about that!'”
|
||||||
|
|
||||||
|
* List of episodes with alternate cuts
|
||||||
|
Airing runtime includes commercials.
|
||||||
|
| Episode | Title | Description | Media |
|
||||||
|
|-------------+------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| S02 E22 | "Casino Night" | Aired on May 11, 2006 as a supersized episode. It airs in syndication as a half-hour episode. | Short cut: Syndication; Supersized cut (28:20): DVD, Netflix, iTunes |
|
||||||
|
| S03 E07 | "Branch Closing" | Aired on November 9, 2006. Later that night, a Producer's Cut of the episode was released on NBC.com. | Original cut: Syndication; Producer's Cut (30:14): DVD, Netflix, iTunes |
|
||||||
|
| S03 E08 | "The Merger" | Aired on November 16, 2006 as a supersized episode. It airs in syndication as a half-hour episode. A subplot involving a Staples paper shredder was removed from future releases. | Short cut: Syndication; Supersized cut (29:50): DVD, Netflix; Original Supersized cut with Staples plot (30:43): iTunes |
|
||||||
|
| S03 E10, 11 | "A Benihana Christmas" | First aired on December 14, 2006, as a one-hour episode. It airs in syndication in two parts. | Hour long cut (41:51): DVD, Netflix, iTunes; 2-Part cut: Syndication |
|
||||||
|
| S03 E12, 13 | "Traveling Salesmen"; "The Return" | "Traveling Salesmen" first aired on January 11, 2007. "The Return" first aired on January 18, 2007. Later that night, a Producer's Cut of "The Return" was released on NBC.com. On March 15, 2007, NBC aired "Traveling Salesmen" and "The Return" as a Newpeat which included additional footage. | Original cut (21:26): Syndication, Netflix, iTunes; "The Return" Producer's Cut (28:25): Netflix, iTunes; "Traveling Salesmen" + "The Return" Newpeat: DVD |
|
||||||
|
| S03 E19 | "The Negotiation" | Aired on April 5, 2007, as a supersized episode. It airs in syndication as a half-hour episode. | Short cut: Syndication; Supersized cut (29:28): DVD, Netflix, iTunes |
|
||||||
|
| S03 E22 | "Women's Appreciation" | Aired on May 3, 2007, as a supersized episode. On August 30, 2007, NBC aired the episode as a regular half-hour episode. This alternate cut both cut material and included new scenes. | Short (new) cut: Syndication; Supersized cut (28:53): DVD, Netflix, iTunes |
|
||||||
|
| S03 E23 | "Beach Games" | Aired on May 10, 2007 as a supersized episode. It airs in syndication as a half-hour episode. | Short cut: Syndication; Supersized cut (27:53): DVD, Netflix, iTunes |
|
||||||
|
| S03 E24, 25 | "The Job" | Aired on May 17, 2007, as a one-hour episode. It airs in syndication in two parts. | Hour long cut (42:24): DVD, Netflix, iTunes; 2-Part cut: Syndication |
|
||||||
|
| S04 E01, 02 | "Fun Run" | Aired on September 27, 2007, as a one-hour episode. It airs in syndication in two parts. | Hour long cut (41:58): DVD, Netflix, iTunes; 2-Part cut: Syndication |
|
||||||
|
| S04 E03, 04 | "Dunder Mifflin Infinity" | Aired on October 4, 2007, as a one-hour episode. It airs in syndication in two parts. | Hour long cut (41:59): DVD, Netflix, iTunes; 2-Part cut: Syndication |
|
||||||
|
| S04 E05, 06 | "Launch Party" | Aired on October 11, 2007, as a one-hour episode. It airs in syndication in two parts. | Hour long cut (41:59): DVD, Netflix, iTunes; 2-Part cut: Syndication |
|
||||||
|
| S04 E07, 08 | "Money" | Aired on October 18, 2007, as a one-hour episode. It airs in syndication in two parts. | Hour long cut (41:58): DVD, Netflix, iTunes; 2-Part cut: Syndication |
|
||||||
|
| S04 E18, 19 | "Goodbye, Toby" | Aired on May 15, 2008, as a one-hour episode. It airs in syndication in two parts. | Hour long cut (41:59): DVD, Netflix, iTunes; 2-Part cut: Syndication |
|
||||||
|
| S05 E01, 02 | "Weight Loss" | Aired on September 25, 2008, as a one-hour episode. It airs in syndication and on Netflix in two parts. | Hour long cut (42:06): DVD, iTunes; 2-Part cut: Syndication, Netflix |
|
||||||
|
| S05 E09 | "Frame Toby" | Aired on November 20, 2008. On November 25, 2008, a Producer's Cut of the episode was released on NBC.com. | Original cut (21:16): Syndication, Netflix, iTunes; Producer's Cut (25:49): DVD |
|
||||||
|
| S05 E14, 15 | "Stress Relief" | Aired on February 1, 2009, as a one-hour episode. It airs in syndication and on Netflix in two parts. | Hour long cut (41:29): DVD, iTunes; 2-Part cut: Syndication, Netflix |
|
||||||
|
| S06 E04, 05 | "Niagara" | Aired on October 8, 2009, as a one-hour episode. It airs in syndication, on Netflix, and on iTunes in two parts. | Hour long cut: DVD; 2-Part cut: Syndication, Netflix, iTunes |
|
||||||
|
| S06 E08 | "Koi Pond" | Aired on October 29, 2009. The Halloween cold open was removed from future releases. | Short cut: Syndication, DVD, Netflix, iTunes |
|
||||||
|
| S06 E13 | "Secret Santa" | Aired on December 10, 2009. On December 15, 2009, a Producer's Cut was released on NBC.com. | Producer's Cut (29:43): Season 6 DVD, "Secret Santa Pack" DVD |
|
||||||
|
| S06 E15 | "Sabre" | Aired on February 4, 2010. On September 7, 2010, Target stores included a Producer's Cut of the episode on an exclusive DVD as part of the Season 6 DVD set. | Original cut (22:07): DVD, Syndication, Netflix, iTunes; Producer's Cut (30:30): Target Exclusive Disc |
|
||||||
|
| S06 E17, 18 | "The Delivery" | Aired on March 4, 2010, as a one-hour episode. It airs in syndication, on Netflix, and on iTunes in two parts. | Hour long cut: DVD; 2-Part cut: Syndication, Netflix, iTunes |
|
||||||
|
| S06 E26 | "Whistleblower" | Aired on May 20, 2010. On September 7, 2010, Target stores included a Producer's Cut of the episode on an exclusive DVD as part of the Season 6 DVD set. | Original cut (22:08): DVD, Syndication, Netflix, iTunes; Producer's Cut (28:17): Target Exclusive Disc |
|
||||||
|
| S07 E11, 12 | "Classy Christmas" | Aired on December 9, 2010, as a one-hour episode. It airs in syndication, on Netflix, and on iTunes in two parts. | Hour long cut: DVD; 2-Part cut: Syndication, Netflix, iTunes |
|
||||||
|
| S07 E20 | "Training Day" | Aired on April 14, 2011. A Producer's Cut was released on the Season 7 DVD on September 6, 2011. | Producer's Cut (34:10): DVD |
|
||||||
|
| S07 E22 | "Goodbye, Michael" | Aired on April 28, 2011, as a supersized episode. On May 26, 2011, NBC aired the episode as a 2-part extended Producer's Cut. | Supersized cut (36:14): DVD, Netflix, iTunes; 2-part Producer's Cut: Syndication |
|
||||||
|
| S07 E25, 26 | "Search Committee" | Aired on May 19, 2011, as a one-hour episode. A Producer's Cut was released on the Season 7 DVD on September 6, 2011. | Original cut: DVD; 2-Part cut: Syndication, Netflix, iTunes; Producer's Cut (55:25) |
|
||||||
|
| S08 E21 | "Angry Andy" | Aired on April 19, 2012. A Producer's Cut was released on the Season 8 DVD on September 4, 2012. | Original cut: DVD, Syndication, Netflix, iTunes; Producer's Cut (33:20): DVD |
|
||||||
|
| S08 E22 | "Fundraiser" | Aired on April 26, 2012. A Producer's Cut was released on the Season 8 DVD on September 4, 2012. | Original cut: DVD, Syndication, Netflix, iTunes; Producer's Cut (25:50): DVD |
|
||||||
|
| S09 E16 | "Moving On" | Aired on February 14, 2013, as a one-hour supersized episode. It airs in syndication and on iTunes in two parts. | 2-Part cut: Syndication, iTunes; Supersized cut: DVD, Netflix |
|
||||||
|
| S09 E21 | "Livin' the Dream" | Aired on May 2, 2013, as a one-hour supersized episode. It airs in syndication and on iTunes in two parts. | 2-Part cut: Syndication, iTunes; Supersized cut: DVD, Netflix |
|
||||||
|
| S09 E22, 23 | "A.A.R.M." | Aired on May 9, 2013, as a one-hour episode. It airs in syndication and on iTunes in two parts. | 2-Part cut: Syndication, iTunes; Supersized cut: DVD, Netflix |
|
||||||
|
| S09 E24, 25 | "Finale" | Aired on May 16, 2013, as a 75-minute supersized episode. It airs in syndication and on iTunes in two parts. | 2-Part cut: Syndication, iTunes; Supersized cut: DVD, Netflix |
|
||||||
|
|
||||||
|
Di seguito una tabella che spiega dove poter reperire gli episodi. Dove non
|
||||||
|
specificato, il rip già contiene la versione più esaustiva.
|
||||||
|
| Episodio | Path |
|
||||||
|
|------------+---------------------------------------------------------------------------|
|
||||||
|
| S03E07 | Specials/TV Recordings/ |
|
||||||
|
| S03E19 | Specials/TV Recordings/ |
|
||||||
|
| S06E08 | Specials/Season 06/Deleted Scenes/S06E08 Koi Pond Halloween Cold Open.mkv |
|
||||||
|
| S06E15 | Il superfan edit contiene (probabilmente) le stesse scene ed altro |
|
||||||
|
| S06E17, 18 | Il superfan edit contiene (probabilmente) le stesse scene ed altro |
|
||||||
|
| S06E26 | Il superfan edit contiene (probabilmente) le stesse scene ed altro |
|
||||||
|
* Additional media
|
||||||
|
This is a list of additional media with indications of when I think it is the
|
||||||
|
most appropriate time to watch it. I compiled this list a while after watching
|
||||||
|
the series so the informations may not be 100% accurate. The specials folder
|
||||||
|
includes also some deleted scenes, bloopers and exclusive interviews and
|
||||||
|
recordings of the cast and the producers.
|
||||||
|
| # | Title | When to watch |
|
||||||
|
|----+------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------|
|
||||||
|
| 1 | The Accountants | At the end of S01 |
|
||||||
|
| 2 | Fake PSA | While watching S02 |
|
||||||
|
| 3 | Faces of Scranton | After S02E16 |
|
||||||
|
| 4 | Steve on Steve | Near or after the end of S02 |
|
||||||
|
| 5 | Kevin Cooks Stuff in The Office | During the first episodes of S03 |
|
||||||
|
| 6 | Excerpt From The 58th Annual Primetime Emmy Awards.mkv | During S03 |
|
||||||
|
| 7 | Excerpts From The 2006 Nbc Primetime Preview Hosted By "The Office" Cast | During S03 |
|
||||||
|
| 8 | Toby Wraparounds.mkv | During S03 |
|
||||||
|
| 9 | Dwight Schrute Music Video | Near the end of S03 |
|
||||||
|
| 10 | Lazy Scranton video | After S03E8 |
|
||||||
|
| 11 | Michael's Ad | After the relevant episode |
|
||||||
|
| 12 | Rabies - The More You Know | After the relevant episode |
|
||||||
|
| 13 | Summer Vacation Promo | At the end of S04 |
|
||||||
|
| 14 | The Promos | While watching S05 |
|
||||||
|
| 15 | Kevin's Bank Loan | While watching S05 |
|
||||||
|
| 16 | The Outburst | After the episode where Oscar is enraged |
|
||||||
|
| 17 | Welcome to Sabre | After the Sabre acquisition |
|
||||||
|
| 18 | The Podcast | After Gabe has been introduced for a couple episodes |
|
||||||
|
| 19 | Canada Games by The Office | After they talk about the Olympics or at the end of S06 |
|
||||||
|
| 20 | Blackmail | While watching S06 |
|
||||||
|
| 21 | Subtle Sexuality | While watching S06 |
|
||||||
|
| 22 | The Mentor | While watching S06 or beginnings of S07 |
|
||||||
|
| 23 | The 3rd Floor | While watching the first episodes of SS07 |
|
||||||
|
| 24 | Girl Next Door | While watching the first episodes of SS07 |
|
||||||
|
| 25 | The Office Promos - XLVI Football Championship | While watching S08 |
|
||||||
|
| 26 | Threat Level Midnight The Movie | Whenever you want: either after they talk about this in the series or during S08 or S09 ;) |
|
||||||
|
| 27 | Autotune Andy | After the relevant episode |
|
||||||
|
| 28 | The Matrix Cold Open | Near the end of S09 |
|
||||||
|
* Suggested reading
|
||||||
|
- https://www.ribbonfarm.com/the-gervais-principle/: The Gervais principle, a
|
||||||
|
very interting analysis of the workplace dynamics while watching the show
|
||||||
|
- https://www.ribbonfarm.com/2009/12/13/random-promotions-and-the-gervais-principle/:
|
||||||
|
small reflections about randomness at work
|
700
blog/theoffice.html
Normal file
700
blog/theoffice.html
Normal file
@ -0,0 +1,700 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||||
|
<head>
|
||||||
|
<!-- 2023-06-23 Fri 11:51 -->
|
||||||
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<title>The Office: a guide to navigate the media</title>
|
||||||
|
<meta name="author" content="bparodi" />
|
||||||
|
<meta name="generator" content="Org Mode" />
|
||||||
|
<link rel="stylesheet" href="articles.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="content" class="content">
|
||||||
|
<h1 class="title">The Office: a guide to navigate the media</h1>
|
||||||
|
<div id="table-of-contents" role="doc-toc">
|
||||||
|
<h2>Table of Contents</h2>
|
||||||
|
<div id="text-table-of-contents" role="doc-toc">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#orgaa84a9b">1. Le due edizioni</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#orgd8a0ead">1.1. The Office superfan episodes completely Change season 3 [SPOILER]</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="#orgf679471">2. List of episodes with alternate cuts</a></li>
|
||||||
|
<li><a href="#orgd58f6d5">3. Additional media</a></li>
|
||||||
|
<li><a href="#orga207568">4. Suggested reading</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-orgaa84a9b" class="outline-2">
|
||||||
|
<h2 id="orgaa84a9b"><span class="section-number-2">1.</span> Le due edizioni</h2>
|
||||||
|
<div class="outline-text-2" id="text-1">
|
||||||
|
<p>
|
||||||
|
Su lezzo puoi vedere due versioni di The Office:
|
||||||
|
</p>
|
||||||
|
<ul class="org-ul">
|
||||||
|
<li>l'originale, trasferita da un misto dei miei bluray e da Amazon</li>
|
||||||
|
<li>la versione superfan di Peacock, un altro servizio di streaming</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
The Office ha avuto più successo negli ultimi anni grazie allo streaming on
|
||||||
|
demand piuttosto che quando era trasmessa in TV.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Per questo motive quando Peacock è diventato l'esclusiva piattaforma di
|
||||||
|
streaming di The Office negli Stati Uniti
|
||||||
|
hanno capite che avrebbero dovuto offrire qualcosa di più per convincere alcuni fan a seguire la serie anziché
|
||||||
|
semplicemente acquistarla nelle molteplici edizioni in DVD e Bluray che ormai
|
||||||
|
sono economicissime.
|
||||||
|
Queste versioni estese degli episodi, chiamate Superfan Edits o Superfan Edition
|
||||||
|
offrono sequenze mai viste e in
|
||||||
|
alcuni casi addirittura mai trasmesse.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A prima vista, sembra un'aggiunta non particolarmente entusiasmante, ma in
|
||||||
|
realtà è un po' più interessante rispetto alla prima serie di Episodi Superfan
|
||||||
|
della terza stagione. Questo perché alcuni degli episodi estesi (chiamati a
|
||||||
|
volte montaggi del produttore) dalla terza stagione in poi sono stati
|
||||||
|
disponibili su DVD. La versione superfan aggiunge moltissimo spessore agli
|
||||||
|
episodi e rispondono ad alcune domande che i fan si sono posti per anni. Nella
|
||||||
|
prossima sezione ho copiato un articolo che parla di come la versione superfan
|
||||||
|
della terza stagione, nonchè la prima stagione ad essere sottoposta a questo
|
||||||
|
edit, arricchisca la visione della serie.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-orgd8a0ead" class="outline-3">
|
||||||
|
<h3 id="orgd8a0ead"><span class="section-number-3">1.1.</span> The Office superfan episodes completely Change season 3 [SPOILER]</h3>
|
||||||
|
<div class="outline-text-3" id="text-1-1">
|
||||||
|
<p>
|
||||||
|
When Peacock first announced that it would be adding The Office to its library
|
||||||
|
with new Superfan episodes, I was as excited as anyone else. Who doesn’t want an
|
||||||
|
extra deranged rant from Dwight or a “That’s what she said” joke from Michael?
|
||||||
|
What I never expected was for them to change my perception of Dunder Mifflin,
|
||||||
|
forever. The Office’s extended cut episodes don’t merely add depth to
|
||||||
|
Season 3. They rewrite them.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
At the moment Peacock’s extended episodes are only available for Season 3 of the
|
||||||
|
series. But that one season makes a great argument for why the streaming service
|
||||||
|
should keep adding these new installments. I’ve only made it through six
|
||||||
|
episodes of painstakingly tracking everything new in The Office’s Superfan cuts,
|
||||||
|
but already I’m viewing characters I love in a different light.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
These apply to big, overarching plot points. Did you ever think it was weird
|
||||||
|
that Pam (Jenna Fischer) got back together with Roy (David Denman) after going
|
||||||
|
on basically one date with another guy? In the typical cut of The Office, Pam’s
|
||||||
|
choice to return to Roy seems a bit sad. It’s as if she’s resigned herself to a
|
||||||
|
lackluster fate she knows she hates. Yet it doesn’t play out that way in the
|
||||||
|
extended cut. We get to see more of Pam’s date with the cartoonist and her tiny
|
||||||
|
fling with that cute guy she danced with during “Diwali.” But more importantly
|
||||||
|
we get to see more of Roy and Pam. We see the breaks Roy keeps taking in the
|
||||||
|
hopes he can see the woman who broke his heart, and we see more of their quiet
|
||||||
|
flirting. It’s easy to write off Roy as an unemotional jerk. But in these small
|
||||||
|
moments it’s clear that he and Pam really had something.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Similarly, Jim’s (John Krasinski) relationship with Karen (Rashida Jones) feels
|
||||||
|
like more than a rebound. When Jim first transfers to Stamford, he’s pretty
|
||||||
|
insufferable. He’s constantly volunteering for more responsibility from Josh
|
||||||
|
(Charles Esten) and copying his boss, down to Josh’s bike riding hobby. We see a
|
||||||
|
bit of that in the traditional cut, but in this longer version Karen
|
||||||
|
consistently berates Jim for his overeager attitude and love of calling himself
|
||||||
|
Assistant Regional Manager. Yes, that is the same gimmick Jim used to pull on
|
||||||
|
Dwight. In this way she acts more as the anti-Pam, not a quiet nice girl but an
|
||||||
|
upfront go-getter who is unafraid to call Jim out on his nonsense. And Jim
|
||||||
|
responds to that reality check.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
On the flip side, as these episodes spend more time with Karen we get to see
|
||||||
|
just how cutting and borderline cruel she can be. During “Gay Witch Hunt” Karen
|
||||||
|
walks by a co-worker who is breastfeeding at her desk. In disgust Karen says,
|
||||||
|
“Put that away. No one wants to see your udder.” That more insulting version of
|
||||||
|
Karen’s typical snark speaks volumes. It foreshadows how she will come to handle
|
||||||
|
her eventual breakup with Jim.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Less crucial romances also gain more dimension. In “Diwali” Ryan (BJ Novak)
|
||||||
|
initially pressures his co-workers to go to the celebration because it would
|
||||||
|
make Kelly (Mindy Kaling) happy. He later bails when it becomes clear her
|
||||||
|
parents are expecting him to ask for permission to marry Kelly. Is Ryan still
|
||||||
|
scum? Absolutely. But in this version he comes across more as a clueless guy in
|
||||||
|
love who can’t bring himself to take the next step. Also, did you know that
|
||||||
|
Angela (Angela Kinsey) was jealous of Kelly between Seasons 2 and 3? During the
|
||||||
|
Season 2 Christmas party, Kelly kissed Dwight (Rainn Wilson) because they were
|
||||||
|
both standing under mistletoe. Of course that’s something the vicious Angela
|
||||||
|
would never forget. Yet that entire plot line and Dwight’s admittedly sweet
|
||||||
|
reconciliation with Angela was cut.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This re-evaluation isn’t limited to the show’s romantic relationships. Though
|
||||||
|
Jan’s (Melora Hardin) monitoring of Michael’s (Steve Carell) work performance is
|
||||||
|
mentioned throughout all cuts of the season, only the Superfan edition truly
|
||||||
|
emphasizes how close Michael was to getting fired. In several episodes Jan
|
||||||
|
forces Michael to walk her through his workday on an hour-by-hour basis. During
|
||||||
|
this evaluation period we get a glimpse of what makes Michael Scott an actually
|
||||||
|
good boss. After slacking off on pretzel day, Michael suddenly bursts into the
|
||||||
|
main room in a sugar-fueled mania. Over the course of about two minutes he
|
||||||
|
spouts off several non-insane ideas about how to make the office more efficient,
|
||||||
|
including a desk reorganization and increased accountability from his
|
||||||
|
employees. He then returns to his desk to presumably make the major sale
|
||||||
|
mentioned at the end of the episode. It isn’t until Season 5 and the Michael
|
||||||
|
Scott Paper Company that it’s revealed that Michael may be good at his job. Yet
|
||||||
|
those seeds were planted two seasons prior then cut out of the script.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
And then there’s the bird funeral. Pam’s obsession over organizing a funeral for
|
||||||
|
a dead bird in “Grief Counseling” has always given me pause. I chalked her
|
||||||
|
interest up to sheer boredom, though that never seemed quite right. Now I
|
||||||
|
understand what I was missing. While reflecting on the death of Ed Truck Pam
|
||||||
|
tells the camera, “Michael once told me that Home Alone is the saddest movie
|
||||||
|
ever. When I asked him why he said, ‘Because the whole family forgets the kid at
|
||||||
|
home. There is nothing funny about that!'”
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-orgf679471" class="outline-2">
|
||||||
|
<h2 id="orgf679471"><span class="section-number-2">2.</span> List of episodes with alternate cuts</h2>
|
||||||
|
<div class="outline-text-2" id="text-2">
|
||||||
|
<p>
|
||||||
|
Airing runtime includes commercials.
|
||||||
|
</p>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="6" rules="none" frame="none">
|
||||||
|
|
||||||
|
|
||||||
|
<colgroup>
|
||||||
|
<col class="org-left" />
|
||||||
|
|
||||||
|
<col class="org-left" />
|
||||||
|
|
||||||
|
<col class="org-left" />
|
||||||
|
|
||||||
|
<col class="org-left" />
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" class="org-left">Episode</th>
|
||||||
|
<th scope="col" class="org-left">Title</th>
|
||||||
|
<th scope="col" class="org-left">Description</th>
|
||||||
|
<th scope="col" class="org-left">Media</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S02 E22</td>
|
||||||
|
<td class="org-left">"Casino Night"</td>
|
||||||
|
<td class="org-left">Aired on May 11, 2006 as a supersized episode. It airs in syndication as a half-hour episode.</td>
|
||||||
|
<td class="org-left">Short cut: Syndication; Supersized cut (28:20): DVD, Netflix, iTunes</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S03 E07</td>
|
||||||
|
<td class="org-left">"Branch Closing"</td>
|
||||||
|
<td class="org-left">Aired on November 9, 2006. Later that night, a Producer's Cut of the episode was released on NBC.com.</td>
|
||||||
|
<td class="org-left">Original cut: Syndication; Producer's Cut (30:14): DVD, Netflix, iTunes</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S03 E08</td>
|
||||||
|
<td class="org-left">"The Merger"</td>
|
||||||
|
<td class="org-left">Aired on November 16, 2006 as a supersized episode. It airs in syndication as a half-hour episode. A subplot involving a Staples paper shredder was removed from future releases.</td>
|
||||||
|
<td class="org-left">Short cut: Syndication; Supersized cut (29:50): DVD, Netflix; Original Supersized cut with Staples plot (30:43): iTunes</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S03 E10, 11</td>
|
||||||
|
<td class="org-left">"A Benihana Christmas"</td>
|
||||||
|
<td class="org-left">First aired on December 14, 2006, as a one-hour episode. It airs in syndication in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut (41:51): DVD, Netflix, iTunes; 2-Part cut: Syndication</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S03 E12, 13</td>
|
||||||
|
<td class="org-left">"Traveling Salesmen"; "The Return"</td>
|
||||||
|
<td class="org-left">"Traveling Salesmen" first aired on January 11, 2007. "The Return" first aired on January 18, 2007. Later that night, a Producer's Cut of "The Return" was released on NBC.com. On March 15, 2007, NBC aired "Traveling Salesmen" and "The Return" as a Newpeat which included additional footage.</td>
|
||||||
|
<td class="org-left">Original cut (21:26): Syndication, Netflix, iTunes; "The Return" Producer's Cut (28:25): Netflix, iTunes; "Traveling Salesmen" + "The Return" Newpeat: DVD</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S03 E19</td>
|
||||||
|
<td class="org-left">"The Negotiation"</td>
|
||||||
|
<td class="org-left">Aired on April 5, 2007, as a supersized episode. It airs in syndication as a half-hour episode.</td>
|
||||||
|
<td class="org-left">Short cut: Syndication; Supersized cut (29:28): DVD, Netflix, iTunes</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S03 E22</td>
|
||||||
|
<td class="org-left">"Women's Appreciation"</td>
|
||||||
|
<td class="org-left">Aired on May 3, 2007, as a supersized episode. On August 30, 2007, NBC aired the episode as a regular half-hour episode. This alternate cut both cut material and included new scenes.</td>
|
||||||
|
<td class="org-left">Short (new) cut: Syndication; Supersized cut (28:53): DVD, Netflix, iTunes</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S03 E23</td>
|
||||||
|
<td class="org-left">"Beach Games"</td>
|
||||||
|
<td class="org-left">Aired on May 10, 2007 as a supersized episode. It airs in syndication as a half-hour episode.</td>
|
||||||
|
<td class="org-left">Short cut: Syndication; Supersized cut (27:53): DVD, Netflix, iTunes</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S03 E24, 25</td>
|
||||||
|
<td class="org-left">"The Job"</td>
|
||||||
|
<td class="org-left">Aired on May 17, 2007, as a one-hour episode. It airs in syndication in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut (42:24): DVD, Netflix, iTunes; 2-Part cut: Syndication</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S04 E01, 02</td>
|
||||||
|
<td class="org-left">"Fun Run"</td>
|
||||||
|
<td class="org-left">Aired on September 27, 2007, as a one-hour episode. It airs in syndication in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut (41:58): DVD, Netflix, iTunes; 2-Part cut: Syndication</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S04 E03, 04</td>
|
||||||
|
<td class="org-left">"Dunder Mifflin Infinity"</td>
|
||||||
|
<td class="org-left">Aired on October 4, 2007, as a one-hour episode. It airs in syndication in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut (41:59): DVD, Netflix, iTunes; 2-Part cut: Syndication</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S04 E05, 06</td>
|
||||||
|
<td class="org-left">"Launch Party"</td>
|
||||||
|
<td class="org-left">Aired on October 11, 2007, as a one-hour episode. It airs in syndication in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut (41:59): DVD, Netflix, iTunes; 2-Part cut: Syndication</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S04 E07, 08</td>
|
||||||
|
<td class="org-left">"Money"</td>
|
||||||
|
<td class="org-left">Aired on October 18, 2007, as a one-hour episode. It airs in syndication in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut (41:58): DVD, Netflix, iTunes; 2-Part cut: Syndication</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S04 E18, 19</td>
|
||||||
|
<td class="org-left">"Goodbye, Toby"</td>
|
||||||
|
<td class="org-left">Aired on May 15, 2008, as a one-hour episode. It airs in syndication in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut (41:59): DVD, Netflix, iTunes; 2-Part cut: Syndication</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S05 E01, 02</td>
|
||||||
|
<td class="org-left">"Weight Loss"</td>
|
||||||
|
<td class="org-left">Aired on September 25, 2008, as a one-hour episode. It airs in syndication and on Netflix in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut (42:06): DVD, iTunes; 2-Part cut: Syndication, Netflix</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S05 E09</td>
|
||||||
|
<td class="org-left">"Frame Toby"</td>
|
||||||
|
<td class="org-left">Aired on November 20, 2008. On November 25, 2008, a Producer's Cut of the episode was released on NBC.com.</td>
|
||||||
|
<td class="org-left">Original cut (21:16): Syndication, Netflix, iTunes; Producer's Cut (25:49): DVD</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S05 E14, 15</td>
|
||||||
|
<td class="org-left">"Stress Relief"</td>
|
||||||
|
<td class="org-left">Aired on February 1, 2009, as a one-hour episode. It airs in syndication and on Netflix in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut (41:29): DVD, iTunes; 2-Part cut: Syndication, Netflix</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S06 E04, 05</td>
|
||||||
|
<td class="org-left">"Niagara"</td>
|
||||||
|
<td class="org-left">Aired on October 8, 2009, as a one-hour episode. It airs in syndication, on Netflix, and on iTunes in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut: DVD; 2-Part cut: Syndication, Netflix, iTunes</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S06 E08</td>
|
||||||
|
<td class="org-left">"Koi Pond"</td>
|
||||||
|
<td class="org-left">Aired on October 29, 2009. The Halloween cold open was removed from future releases.</td>
|
||||||
|
<td class="org-left">Short cut: Syndication, DVD, Netflix, iTunes</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S06 E13</td>
|
||||||
|
<td class="org-left">"Secret Santa"</td>
|
||||||
|
<td class="org-left">Aired on December 10, 2009. On December 15, 2009, a Producer's Cut was released on NBC.com.</td>
|
||||||
|
<td class="org-left">Producer's Cut (29:43): Season 6 DVD, "Secret Santa Pack" DVD</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S06 E15</td>
|
||||||
|
<td class="org-left">"Sabre"</td>
|
||||||
|
<td class="org-left">Aired on February 4, 2010. On September 7, 2010, Target stores included a Producer's Cut of the episode on an exclusive DVD as part of the Season 6 DVD set.</td>
|
||||||
|
<td class="org-left">Original cut (22:07): DVD, Syndication, Netflix, iTunes; Producer's Cut (30:30): Target Exclusive Disc</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S06 E17, 18</td>
|
||||||
|
<td class="org-left">"The Delivery"</td>
|
||||||
|
<td class="org-left">Aired on March 4, 2010, as a one-hour episode. It airs in syndication, on Netflix, and on iTunes in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut: DVD; 2-Part cut: Syndication, Netflix, iTunes</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S06 E26</td>
|
||||||
|
<td class="org-left">"Whistleblower"</td>
|
||||||
|
<td class="org-left">Aired on May 20, 2010. On September 7, 2010, Target stores included a Producer's Cut of the episode on an exclusive DVD as part of the Season 6 DVD set.</td>
|
||||||
|
<td class="org-left">Original cut (22:08): DVD, Syndication, Netflix, iTunes; Producer's Cut (28:17): Target Exclusive Disc</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S07 E11, 12</td>
|
||||||
|
<td class="org-left">"Classy Christmas"</td>
|
||||||
|
<td class="org-left">Aired on December 9, 2010, as a one-hour episode. It airs in syndication, on Netflix, and on iTunes in two parts.</td>
|
||||||
|
<td class="org-left">Hour long cut: DVD; 2-Part cut: Syndication, Netflix, iTunes</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S07 E20</td>
|
||||||
|
<td class="org-left">"Training Day"</td>
|
||||||
|
<td class="org-left">Aired on April 14, 2011. A Producer's Cut was released on the Season 7 DVD on September 6, 2011.</td>
|
||||||
|
<td class="org-left">Producer's Cut (34:10): DVD</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S07 E22</td>
|
||||||
|
<td class="org-left">"Goodbye, Michael"</td>
|
||||||
|
<td class="org-left">Aired on April 28, 2011, as a supersized episode. On May 26, 2011, NBC aired the episode as a 2-part extended Producer's Cut.</td>
|
||||||
|
<td class="org-left">Supersized cut (36:14): DVD, Netflix, iTunes; 2-part Producer's Cut: Syndication</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S07 E25, 26</td>
|
||||||
|
<td class="org-left">"Search Committee"</td>
|
||||||
|
<td class="org-left">Aired on May 19, 2011, as a one-hour episode. A Producer's Cut was released on the Season 7 DVD on September 6, 2011.</td>
|
||||||
|
<td class="org-left">Original cut: DVD; 2-Part cut: Syndication, Netflix, iTunes; Producer's Cut (55:25)</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S08 E21</td>
|
||||||
|
<td class="org-left">"Angry Andy"</td>
|
||||||
|
<td class="org-left">Aired on April 19, 2012. A Producer's Cut was released on the Season 8 DVD on September 4, 2012.</td>
|
||||||
|
<td class="org-left">Original cut: DVD, Syndication, Netflix, iTunes; Producer's Cut (33:20): DVD</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S08 E22</td>
|
||||||
|
<td class="org-left">"Fundraiser"</td>
|
||||||
|
<td class="org-left">Aired on April 26, 2012. A Producer's Cut was released on the Season 8 DVD on September 4, 2012.</td>
|
||||||
|
<td class="org-left">Original cut: DVD, Syndication, Netflix, iTunes; Producer's Cut (25:50): DVD</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S09 E16</td>
|
||||||
|
<td class="org-left">"Moving On"</td>
|
||||||
|
<td class="org-left">Aired on February 14, 2013, as a one-hour supersized episode. It airs in syndication and on iTunes in two parts.</td>
|
||||||
|
<td class="org-left">2-Part cut: Syndication, iTunes; Supersized cut: DVD, Netflix</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S09 E21</td>
|
||||||
|
<td class="org-left">"Livin' the Dream"</td>
|
||||||
|
<td class="org-left">Aired on May 2, 2013, as a one-hour supersized episode. It airs in syndication and on iTunes in two parts.</td>
|
||||||
|
<td class="org-left">2-Part cut: Syndication, iTunes; Supersized cut: DVD, Netflix</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S09 E22, 23</td>
|
||||||
|
<td class="org-left">"A.A.R.M."</td>
|
||||||
|
<td class="org-left">Aired on May 9, 2013, as a one-hour episode. It airs in syndication and on iTunes in two parts.</td>
|
||||||
|
<td class="org-left">2-Part cut: Syndication, iTunes; Supersized cut: DVD, Netflix</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S09 E24, 25</td>
|
||||||
|
<td class="org-left">"Finale"</td>
|
||||||
|
<td class="org-left">Aired on May 16, 2013, as a 75-minute supersized episode. It airs in syndication and on iTunes in two parts.</td>
|
||||||
|
<td class="org-left">2-Part cut: Syndication, iTunes; Supersized cut: DVD, Netflix</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Di seguito una tabella che spiega dove poter reperire gli episodi. Dove non
|
||||||
|
specificato, il rip già contiene la versione più esaustiva.
|
||||||
|
</p>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="6" rules="none" frame="none">
|
||||||
|
|
||||||
|
|
||||||
|
<colgroup>
|
||||||
|
<col class="org-left" />
|
||||||
|
|
||||||
|
<col class="org-left" />
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" class="org-left">Episodio</th>
|
||||||
|
<th scope="col" class="org-left">Path</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S03E07</td>
|
||||||
|
<td class="org-left">Specials/TV Recordings/</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S03E19</td>
|
||||||
|
<td class="org-left">Specials/TV Recordings/</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S06E08</td>
|
||||||
|
<td class="org-left">Specials/Season 06/Deleted Scenes/S06E08 Koi Pond Halloween Cold Open.mkv</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S06E15</td>
|
||||||
|
<td class="org-left">Il superfan edit contiene (probabilmente) le stesse scene ed altro</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S06E17, 18</td>
|
||||||
|
<td class="org-left">Il superfan edit contiene (probabilmente) le stesse scene ed altro</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">S06E26</td>
|
||||||
|
<td class="org-left">Il superfan edit contiene (probabilmente) le stesse scene ed altro</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-orgd58f6d5" class="outline-2">
|
||||||
|
<h2 id="orgd58f6d5"><span class="section-number-2">3.</span> Additional media</h2>
|
||||||
|
<div class="outline-text-2" id="text-3">
|
||||||
|
<p>
|
||||||
|
This is a list of additional media with indications of when I think it is the
|
||||||
|
most appropriate time to watch it. I compiled this list a while after watching
|
||||||
|
the series so the informations may not be 100% accurate. The specials folder
|
||||||
|
includes also some deleted scenes, bloopers and exclusive interviews and
|
||||||
|
recordings of the cast and the producers.
|
||||||
|
</p>
|
||||||
|
<table border="0" cellspacing="0" cellpadding="6" rules="none" frame="none">
|
||||||
|
|
||||||
|
|
||||||
|
<colgroup>
|
||||||
|
<col class="org-right" />
|
||||||
|
|
||||||
|
<col class="org-left" />
|
||||||
|
|
||||||
|
<col class="org-left" />
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" class="org-right">#</th>
|
||||||
|
<th scope="col" class="org-left">Title</th>
|
||||||
|
<th scope="col" class="org-left">When to watch</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">1</td>
|
||||||
|
<td class="org-left">The Accountants</td>
|
||||||
|
<td class="org-left">At the end of S01</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">2</td>
|
||||||
|
<td class="org-left">Fake PSA</td>
|
||||||
|
<td class="org-left">While watching S02</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">3</td>
|
||||||
|
<td class="org-left">Faces of Scranton</td>
|
||||||
|
<td class="org-left">After S02E16</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">4</td>
|
||||||
|
<td class="org-left">Steve on Steve</td>
|
||||||
|
<td class="org-left">Near or after the end of S02</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">5</td>
|
||||||
|
<td class="org-left">Kevin Cooks Stuff in The Office</td>
|
||||||
|
<td class="org-left">During the first episodes of S03</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">6</td>
|
||||||
|
<td class="org-left">Excerpt From The 58th Annual Primetime Emmy Awards.mkv</td>
|
||||||
|
<td class="org-left">During S03</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">7</td>
|
||||||
|
<td class="org-left">Excerpts From The 2006 Nbc Primetime Preview Hosted By "The Office" Cast</td>
|
||||||
|
<td class="org-left">During S03</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">8</td>
|
||||||
|
<td class="org-left">Toby Wraparounds.mkv</td>
|
||||||
|
<td class="org-left">During S03</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">9</td>
|
||||||
|
<td class="org-left">Dwight Schrute Music Video</td>
|
||||||
|
<td class="org-left">Near the end of S03</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">10</td>
|
||||||
|
<td class="org-left">Lazy Scranton video</td>
|
||||||
|
<td class="org-left">After S03E8</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">11</td>
|
||||||
|
<td class="org-left">Michael's Ad</td>
|
||||||
|
<td class="org-left">After the relevant episode</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">12</td>
|
||||||
|
<td class="org-left">Rabies - The More You Know</td>
|
||||||
|
<td class="org-left">After the relevant episode</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">13</td>
|
||||||
|
<td class="org-left">Summer Vacation Promo</td>
|
||||||
|
<td class="org-left">At the end of S04</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">14</td>
|
||||||
|
<td class="org-left">The Promos</td>
|
||||||
|
<td class="org-left">While watching S05</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">15</td>
|
||||||
|
<td class="org-left">Kevin's Bank Loan</td>
|
||||||
|
<td class="org-left">While watching S05</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">16</td>
|
||||||
|
<td class="org-left">The Outburst</td>
|
||||||
|
<td class="org-left">After the episode where Oscar is enraged</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">17</td>
|
||||||
|
<td class="org-left">Welcome to Sabre</td>
|
||||||
|
<td class="org-left">After the Sabre acquisition</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">18</td>
|
||||||
|
<td class="org-left">The Podcast</td>
|
||||||
|
<td class="org-left">After Gabe has been introduced for a couple episodes</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">19</td>
|
||||||
|
<td class="org-left">Canada Games by The Office</td>
|
||||||
|
<td class="org-left">After they talk about the Olympics or at the end of S06</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">20</td>
|
||||||
|
<td class="org-left">Blackmail</td>
|
||||||
|
<td class="org-left">While watching S06</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">21</td>
|
||||||
|
<td class="org-left">Subtle Sexuality</td>
|
||||||
|
<td class="org-left">While watching S06</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">22</td>
|
||||||
|
<td class="org-left">The Mentor</td>
|
||||||
|
<td class="org-left">While watching S06 or beginnings of S07</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">23</td>
|
||||||
|
<td class="org-left">The 3rd Floor</td>
|
||||||
|
<td class="org-left">While watching the first episodes of SS07</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">24</td>
|
||||||
|
<td class="org-left">Girl Next Door</td>
|
||||||
|
<td class="org-left">While watching the first episodes of SS07</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">25</td>
|
||||||
|
<td class="org-left">The Office Promos - XLVI Football Championship</td>
|
||||||
|
<td class="org-left">While watching S08</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">26</td>
|
||||||
|
<td class="org-left">Threat Level Midnight The Movie</td>
|
||||||
|
<td class="org-left">Whenever you want: either after they talk about this in the series or during S08 or S09 ;)</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">27</td>
|
||||||
|
<td class="org-left">Autotune Andy</td>
|
||||||
|
<td class="org-left">After the relevant episode</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-right">28</td>
|
||||||
|
<td class="org-left">The Matrix Cold Open</td>
|
||||||
|
<td class="org-left">Near the end of S09</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-orga207568" class="outline-2">
|
||||||
|
<h2 id="orga207568"><span class="section-number-2">4.</span> Suggested reading</h2>
|
||||||
|
<div class="outline-text-2" id="text-4">
|
||||||
|
<ul class="org-ul">
|
||||||
|
<li><a href="https://www.ribbonfarm.com/the-gervais-principle/">https://www.ribbonfarm.com/the-gervais-principle/</a>: The Gervais principle, a
|
||||||
|
very interting analysis of the workplace dynamics while watching the show</li>
|
||||||
|
<li><a href="https://www.ribbonfarm.com/2009/12/13/random-promotions-and-the-gervais-principle/">https://www.ribbonfarm.com/2009/12/13/random-promotions-and-the-gervais-principle/</a>:
|
||||||
|
small reflections about randomness at work</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="postamble" class="status">
|
||||||
|
<p class="author">Author: bparodi</p>
|
||||||
|
<p class="date">Created: 2023-06-23 Fri 11:51</p>
|
||||||
|
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
17
bocciofila/TweenMax.min.js
vendored
Normal file
17
bocciofila/TweenMax.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
bocciofila/arrow-small.png
Normal file
BIN
bocciofila/arrow-small.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
bocciofila/arrow.png
Normal file
BIN
bocciofila/arrow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.5 KiB |
BIN
bocciofila/audiovideo.webm
Normal file
BIN
bocciofila/audiovideo.webm
Normal file
Binary file not shown.
55
bocciofila/autoptimize_62cbd689f055653f750a3761c62266a5.css
Normal file
55
bocciofila/autoptimize_62cbd689f055653f750a3761c62266a5.css
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
|||||||
|
.elementor-kit-517{--e-global-color-primary:#6ec1e4;--e-global-color-secondary:#54595f;--e-global-color-text:#7a7a7a;--e-global-color-accent:#61ce70;--e-global-typography-primary-font-family:"Roboto";--e-global-typography-primary-font-weight:600;--e-global-typography-secondary-font-family:"Roboto Slab";--e-global-typography-secondary-font-weight:400;--e-global-typography-text-font-family:"Roboto";--e-global-typography-text-font-weight:400;--e-global-typography-accent-font-family:"Roboto";--e-global-typography-accent-font-weight:500}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1140px}.elementor-widget:not(:last-child){margin-bottom:20px}{}h1.entry-title{display:var(--page-title-display)}@media(max-width:1024px){.elementor-section.elementor-section-boxed>.elementor-container{max-width:1024px}}@media(max-width:767px){.elementor-section.elementor-section-boxed>.elementor-container{max-width:767px}}
|
@ -0,0 +1,210 @@
|
|||||||
|
function Winwheel(options,drawWheel)
|
||||||
|
{defaultOptions={'canvasId':'canvas','centerX':null,'centerY':null,'outerRadius':null,'innerRadius':0,'numSegments':1,'drawMode':'code','rotationAngle':0,'textFontFamily':'Arial','textFontSize':20,'textFontWeight':'bold','textOrientation':'horizontal','textAlignment':'center','textDirection':'normal','textMargin':null,'textFillStyle':'black','textStrokeStyle':null,'textLineWidth':1,'fillStyle':'silver','strokeStyle':'black','lineWidth':1,'clearTheCanvas':true,'imageOverlay':false,'drawText':true,'pointerAngle':0,'wheelImage':null,'imageDirection':'N','responsive':false,'scaleFactor':1,};for(let key in defaultOptions){if((options!=null)&&(typeof(options[key])!=='undefined')){this[key]=options[key];}else{this[key]=defaultOptions[key];}}
|
||||||
|
if(options!=null){for(let key in options){if(typeof(this[key])==='undefined'){this[key]=options[key];}}}
|
||||||
|
if(this.canvasId){this.canvas=document.getElementById(this.canvasId);if(this.canvas){if(this.centerX==null){this.centerX=this.canvas.width/2;}
|
||||||
|
if(this.centerY==null){this.centerY=this.canvas.height/2;}
|
||||||
|
if(this.outerRadius==null){if(this.canvas.width<this.canvas.height){this.outerRadius=(this.canvas.width/2)-this.lineWidth;}else{this.outerRadius=(this.canvas.height/2)-this.lineWidth;}}
|
||||||
|
this.ctx=this.canvas.getContext('2d');}else{this.canvas=null;this.ctx=null;}}else{this.canvas=null;this.ctx=null;}
|
||||||
|
this.segments=new Array(null);for(let x=1;x<=this.numSegments;x++){if((options!=null)&&(options['segments'])&&(typeof(options['segments'][x-1])!=='undefined')){this.segments[x]=new Segment(options['segments'][x-1]);}else{this.segments[x]=new Segment();}}
|
||||||
|
this.updateSegmentSizes();if(this.textMargin===null){this.textMargin=(this.textFontSize/1.7);}
|
||||||
|
if((options!=null)&&(options['animation'])&&(typeof(options['animation'])!=='undefined')){this.animation=new Animation(options['animation']);}else{this.animation=new Animation();}
|
||||||
|
if((options!=null)&&(options['pins'])&&(typeof(options['pins'])!=='undefined')){this.pins=new Pin(options['pins']);}
|
||||||
|
if((this.drawMode=='image')||(this.drawMode=='segmentImage')){if(typeof(options['fillStyle'])==='undefined'){this.fillStyle=null;}
|
||||||
|
if(typeof(options['strokeStyle'])==='undefined'){this.strokeStyle='red';}
|
||||||
|
if(typeof(options['drawText'])==='undefined'){this.drawText=false;}
|
||||||
|
if(typeof(options['lineWidth'])==='undefined'){this.lineWidth=1;}
|
||||||
|
if(typeof(drawWheel)==='undefined'){drawWheel=false;}}else{if(typeof(drawWheel)==='undefined'){drawWheel=true;}}
|
||||||
|
if((options!=null)&&(options['pointerGuide'])&&(typeof(options['pointerGuide'])!=='undefined')){this.pointerGuide=new PointerGuide(options['pointerGuide']);}else{this.pointerGuide=new PointerGuide();}
|
||||||
|
if(this.responsive){winwheelToDrawDuringAnimation=this;this._originalCanvasWidth=this.canvas.width;this._originalCanvasHeight=this.canvas.height;this._responsiveScaleHeight=this.canvas.dataset.responsivescaleheight;this._responsiveMinWidth=this.canvas.dataset.responsiveminwidth;this._responsiveMinHeight=this.canvas.dataset.responsiveminheight;this._responsiveMargin=this.canvas.dataset.responsivemargin;window.addEventListener("load",winwheelResize);window.addEventListener("resize",winwheelResize);}
|
||||||
|
if(drawWheel==true){this.draw(this.clearTheCanvas);}else if(this.drawMode=='segmentImage'){winwheelToDrawDuringAnimation=this;winhweelAlreadyDrawn=false;for(let y=1;y<=this.numSegments;y++){if(this.segments[y].image!==null){this.segments[y].imgData=new Image();this.segments[y].imgData.onload=winwheelLoadedImage;this.segments[y].imgData.src=this.segments[y].image;}}}}
|
||||||
|
Winwheel.prototype.updateSegmentSizes=function()
|
||||||
|
{if(this.segments){let arcUsed=0;let numSet=0;for(let x=1;x<=this.numSegments;x++){if(this.segments[x].size!==null){arcUsed+=this.segments[x].size;numSet++;}}
|
||||||
|
let arcLeft=(360-arcUsed);let degreesEach=0;if(arcLeft>0){degreesEach=(arcLeft/(this.numSegments-numSet));}
|
||||||
|
let currentDegree=0;for(let x=1;x<=this.numSegments;x++){this.segments[x].startAngle=currentDegree;if(this.segments[x].size){currentDegree+=this.segments[x].size;}else{currentDegree+=degreesEach;}
|
||||||
|
this.segments[x].endAngle=currentDegree;}}}
|
||||||
|
Winwheel.prototype.clearCanvas=function()
|
||||||
|
{if(this.ctx){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);}}
|
||||||
|
Winwheel.prototype.draw=function(clearTheCanvas)
|
||||||
|
{if(this.ctx){if(typeof(clearTheCanvas)!=='undefined'){if(clearTheCanvas==true){this.clearCanvas();}}else{this.clearCanvas();}
|
||||||
|
if(this.drawMode=='image'){this.drawWheelImage();if(this.drawText==true){this.drawSegmentText();}
|
||||||
|
if(this.imageOverlay==true){this.drawSegments();}}else if(this.drawMode=='segmentImage'){this.drawSegmentImages();if(this.drawText==true){this.drawSegmentText();}
|
||||||
|
if(this.imageOverlay==true){this.drawSegments();}}else{this.drawSegments();if(this.drawText==true){this.drawSegmentText();}}
|
||||||
|
if(typeof this.pins!=='undefined'){if(this.pins.visible==true){this.drawPins();}}
|
||||||
|
if(this.pointerGuide.display==true){this.drawPointerGuide();}}}
|
||||||
|
Winwheel.prototype.drawPins=function()
|
||||||
|
{if((this.pins)&&(this.pins.number)){let centerX=(this.centerX*this.scaleFactor);let centerY=(this.centerY*this.scaleFactor);let outerRadius=(this.outerRadius*this.scaleFactor);let pinOuterRadius=this.pins.outerRadius;let pinMargin=this.pins.margin;if(this.pins.responsive){pinOuterRadius=(this.pins.outerRadius*this.scaleFactor);pinMargin=(this.pins.margin*this.scaleFactor);}
|
||||||
|
let pinSpacing=(360/this.pins.number);for(let i=1;i<=this.pins.number;i++){this.ctx.save();this.ctx.strokeStyle=this.pins.strokeStyle;this.ctx.lineWidth=this.pins.lineWidth;this.ctx.fillStyle=this.pins.fillStyle;this.ctx.translate(centerX,centerY);this.ctx.rotate(this.degToRad(i*pinSpacing+this.rotationAngle));this.ctx.translate(-centerX,-centerY);this.ctx.beginPath();this.ctx.arc(centerX,(centerY-outerRadius)+pinOuterRadius+pinMargin,pinOuterRadius,0,2*Math.PI);if(this.pins.fillStyle){this.ctx.fill();}
|
||||||
|
if(this.pins.strokeStyle){this.ctx.stroke();}
|
||||||
|
this.ctx.restore();}}}
|
||||||
|
Winwheel.prototype.drawPointerGuide=function()
|
||||||
|
{if(this.ctx){let centerX=(this.centerX*this.scaleFactor);let centerY=(this.centerY*this.scaleFactor);let outerRadius=(this.outerRadius*this.scaleFactor);this.ctx.save();this.ctx.translate(centerX,centerY);this.ctx.rotate(this.degToRad(this.pointerAngle));this.ctx.translate(-centerX,-centerY);this.ctx.strokeStyle=this.pointerGuide.strokeStyle;this.ctx.lineWidth=this.pointerGuide.lineWidth;this.ctx.beginPath();this.ctx.moveTo(centerX,centerY);this.ctx.lineTo(centerX,-(outerRadius/4));this.ctx.stroke();this.ctx.restore();}}
|
||||||
|
Winwheel.prototype.drawWheelImage=function()
|
||||||
|
{if(this.wheelImage!=null){let centerX=(this.centerX*this.scaleFactor);let centerY=(this.centerY*this.scaleFactor);let scaledWidth=(this.wheelImage.width*this.scaleFactor);let scaledHeight=(this.wheelImage.height*this.scaleFactor);let imageLeft=(centerX-(scaledWidth/2));let imageTop=(centerY-(scaledHeight/2));this.ctx.save();this.ctx.translate(centerX,centerY);this.ctx.rotate(this.degToRad(this.rotationAngle));this.ctx.translate(-centerX,-centerY);this.ctx.drawImage(this.wheelImage,imageLeft,imageTop,scaledWidth,scaledHeight);this.ctx.restore();}}
|
||||||
|
Winwheel.prototype.drawSegmentImages=function()
|
||||||
|
{if(this.ctx){let centerX=(this.centerX*this.scaleFactor);let centerY=(this.centerY*this.scaleFactor);if(this.segments){for(let x=1;x<=this.numSegments;x++){let seg=this.segments[x];if(seg.imgData.height){let imageLeft=0;let imageTop=0;let imageAngle=0;let imageDirection='';let scaledWidth=(seg.imgData.width*this.scaleFactor);let scaledHeight=(seg.imgData.height*this.scaleFactor);if(seg.imageDirection!==null){imageDirection=seg.imageDirection;}else{imageDirection=this.imageDirection;}
|
||||||
|
if(imageDirection=='S'){imageLeft=(centerX-(scaledWidth/2));imageTop=centerY;imageAngle=(seg.startAngle+180+((seg.endAngle-seg.startAngle)/2));}else if(imageDirection=='E'){imageLeft=centerX;imageTop=(centerY-(scaledHeight/2));imageAngle=(seg.startAngle+270+((seg.endAngle-seg.startAngle)/2));}else if(imageDirection=='W'){imageLeft=(centerX-scaledWidth);imageTop=(centerY-(scaledHeight/2));imageAngle=(seg.startAngle+90+((seg.endAngle-seg.startAngle)/2));}else{imageLeft=(centerX-(scaledWidth/2));imageTop=(centerY-scaledHeight);imageAngle=(seg.startAngle+((seg.endAngle-seg.startAngle)/2));}
|
||||||
|
this.ctx.save();this.ctx.translate(centerX,centerY);this.ctx.rotate(this.degToRad(this.rotationAngle+imageAngle));this.ctx.translate(-centerX,-centerY);this.ctx.drawImage(seg.imgData,imageLeft,imageTop,scaledWidth,scaledHeight);this.ctx.restore();}else{console.log('Segment '+x+' imgData is not loaded');}}}}}
|
||||||
|
Winwheel.prototype.drawSegments=function()
|
||||||
|
{if(this.ctx){if(this.segments){let centerX=(this.centerX*this.scaleFactor);let centerY=(this.centerY*this.scaleFactor);let innerRadius=(this.innerRadius*this.scaleFactor);let outerRadius=(this.outerRadius*this.scaleFactor);for(let x=1;x<=this.numSegments;x++){let seg=this.segments[x];let fillStyle;let lineWidth;let strokeStyle;if(seg.fillStyle!==null){fillStyle=seg.fillStyle;}else{fillStyle=this.fillStyle;}
|
||||||
|
this.ctx.fillStyle=fillStyle;if(seg.lineWidth!==null){lineWidth=seg.lineWidth;}else{lineWidth=this.lineWidth;}
|
||||||
|
this.ctx.lineWidth=lineWidth;if(seg.strokeStyle!==null){strokeStyle=seg.strokeStyle;}else{strokeStyle=this.strokeStyle;}
|
||||||
|
this.ctx.strokeStyle=strokeStyle;if((strokeStyle)||(fillStyle)){this.ctx.beginPath();if(!this.innerRadius){this.ctx.moveTo(centerX,centerY);}else{let iX=Math.cos(this.degToRad(seg.startAngle+this.rotationAngle-90))*(innerRadius-lineWidth/2);let iY=Math.sin(this.degToRad(seg.startAngle+this.rotationAngle-90))*(innerRadius-lineWidth/2);this.ctx.moveTo(centerX+iX,centerY+iY);}
|
||||||
|
this.ctx.arc(centerX,centerY,outerRadius,this.degToRad(seg.startAngle+this.rotationAngle-90),this.degToRad(seg.endAngle+this.rotationAngle-90),false);if(this.innerRadius){this.ctx.arc(centerX,centerY,innerRadius,this.degToRad(seg.endAngle+this.rotationAngle-90),this.degToRad(seg.startAngle+this.rotationAngle-90),true);}else{this.ctx.lineTo(centerX,centerY);}
|
||||||
|
if(fillStyle){this.ctx.fill();}
|
||||||
|
if(strokeStyle){this.ctx.stroke();}}}}}}
|
||||||
|
Winwheel.prototype.drawSegmentText=function()
|
||||||
|
{if(this.ctx){let fontFamily;let fontSize;let fontWeight;let orientation;let alignment;let direction;let margin;let fillStyle;let strokeStyle;let lineWidth;let fontSetting;let centerX=(this.centerX*this.scaleFactor);let centerY=(this.centerY*this.scaleFactor);let outerRadius=(this.outerRadius*this.scaleFactor);let innerRadius=(this.innerRadius*this.scaleFactor);for(let x=1;x<=this.numSegments;x++){this.ctx.save();let seg=this.segments[x];if(seg.text){if(seg.textFontFamily!==null)fontFamily=seg.textFontFamily;else fontFamily=this.textFontFamily;if(seg.textFontSize!==null)fontSize=seg.textFontSize;else fontSize=this.textFontSize;if(seg.textFontWeight!==null)fontWeight=seg.textFontWeight;else fontWeight=this.textFontWeight;if(seg.textOrientation!==null)orientation=seg.textOrientation;else orientation=this.textOrientation;if(seg.textAlignment!==null)alignment=seg.textAlignment;else alignment=this.textAlignment;if(seg.textDirection!==null)direction=seg.textDirection;else direction=this.textDirection;if(seg.textMargin!==null)margin=seg.textMargin;else margin=this.textMargin;if(seg.textFillStyle!==null)fillStyle=seg.textFillStyle;else fillStyle=this.textFillStyle;if(seg.textStrokeStyle!==null)strokeStyle=seg.textStrokeStyle;else strokeStyle=this.textStrokeStyle;if(seg.textLineWidth!==null)lineWidth=seg.textLineWidth;else lineWidth=this.textLineWidth;fontSize=(fontSize*this.scaleFactor);margin=(margin*this.scaleFactor);let fontSetting='';if(fontWeight!=null){fontSetting+=fontWeight+' ';}
|
||||||
|
if(fontSize!=null){fontSetting+=fontSize+'px ';}
|
||||||
|
if(fontFamily!=null){fontSetting+=fontFamily;}
|
||||||
|
this.ctx.font=fontSetting;this.ctx.fillStyle=fillStyle;this.ctx.strokeStyle=strokeStyle;this.ctx.lineWidth=lineWidth;let lines=seg.text.split('\n');let lineOffset=0-(fontSize*(lines.length/2))+(fontSize/2);if((orientation=='curved')&&((alignment=='inner')||(alignment=='outer'))){lineOffset=0;}
|
||||||
|
for(let i=0;i<lines.length;i++){if(direction=='reversed'){if(orientation=='horizontal'){if(alignment=='inner'){this.ctx.textAlign='right';}else if(alignment=='outer'){this.ctx.textAlign='left';}else{this.ctx.textAlign='center';}
|
||||||
|
this.ctx.textBaseline='middle';let textAngle=this.degToRad((seg.endAngle-((seg.endAngle-seg.startAngle)/2)+this.rotationAngle-90)-180);this.ctx.save();this.ctx.translate(centerX,centerY);this.ctx.rotate(textAngle);this.ctx.translate(-centerX,-centerY);if(alignment=='inner'){if(fillStyle){this.ctx.fillText(lines[i],centerX-innerRadius-margin,centerY+lineOffset);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(lines[i],centerX-innerRadius-margin,centerY+lineOffset);}}else if(alignment=='outer'){if(fillStyle){this.ctx.fillText(lines[i],centerX-outerRadius+margin,centerY+lineOffset);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(lines[i],centerX-outerRadius+margin,centerY+lineOffset);}}else{if(fillStyle){this.ctx.fillText(lines[i],centerX-innerRadius-((outerRadius-innerRadius)/2)-margin,centerY+lineOffset);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(lines[i],centerX-innerRadius-((outerRadius-innerRadius)/2)-margin,centerY+lineOffset);}}
|
||||||
|
this.ctx.restore();}else if(orientation=='vertical'){this.ctx.textAlign='center';if(alignment=='inner'){this.ctx.textBaseline='top';}else if(alignment=='outer'){this.ctx.textBaseline='bottom';}else{this.ctx.textBaseline='middle';}
|
||||||
|
let textAngle=(seg.endAngle-((seg.endAngle-seg.startAngle)/2)-180);textAngle+=this.rotationAngle;this.ctx.save();this.ctx.translate(centerX,centerY);this.ctx.rotate(this.degToRad(textAngle));this.ctx.translate(-centerX,-centerY);let yPos=0;if(alignment=='outer'){yPos=(centerY+outerRadius-margin);}else if(alignment=='inner'){yPos=(centerY+innerRadius+margin);}
|
||||||
|
let yInc=(fontSize-(fontSize/9));if(alignment=='outer'){for(let c=(lines[i].length-1);c>=0;c--){let character=lines[i].charAt(c);if(fillStyle){this.ctx.fillText(character,centerX+lineOffset,yPos);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(character,centerX+lineOffset,yPos);}
|
||||||
|
yPos-=yInc;}}else if(alignment=='inner'){for(let c=0;c<lines[i].length;c++){let character=lines[i].charAt(c);if(fillStyle){this.ctx.fillText(character,centerX+lineOffset,yPos);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(character,centerX+lineOffset,yPos);}
|
||||||
|
yPos+=yInc;}}else if(alignment=='center'){let centerAdjustment=0;if(lines[i].length>1){centerAdjustment=(yInc*(lines[i].length-1)/2);}
|
||||||
|
let yPos=(centerY+innerRadius+((outerRadius-innerRadius)/2))+centerAdjustment+margin;for(let c=(lines[i].length-1);c>=0;c--){let character=lines[i].charAt(c);if(fillStyle){this.ctx.fillText(character,centerX+lineOffset,yPos);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(character,centerX+lineOffset,yPos);}
|
||||||
|
yPos-=yInc;}}
|
||||||
|
this.ctx.restore();}else if(orientation=='curved'){let radius=0;if(alignment=='inner'){radius=innerRadius+margin;this.ctx.textBaseline='top';}else if(alignment=='outer'){radius=outerRadius-margin;this.ctx.textBaseline='bottom';radius-=(fontSize*(lines.length-1));}else if(alignment=='center'){radius=innerRadius+margin+((outerRadius-innerRadius)/2);this.ctx.textBaseline='middle';}
|
||||||
|
let anglePerChar=0;let drawAngle=0;if(lines[i].length>1){this.ctx.textAlign='left';anglePerChar=(4*(fontSize/10));let radiusPercent=(100/radius);anglePerChar=(anglePerChar*radiusPercent);let totalArc=(anglePerChar*lines[i].length);drawAngle=seg.startAngle+(((seg.endAngle-seg.startAngle)/2)-(totalArc/2));}else{drawAngle=(seg.startAngle+((seg.endAngle-seg.startAngle)/2));this.ctx.textAlign='center';}
|
||||||
|
drawAngle+=this.rotationAngle;drawAngle-=180;for(let c=lines[i].length;c>=0;c--){this.ctx.save();let character=lines[i].charAt(c);this.ctx.translate(centerX,centerY);this.ctx.rotate(this.degToRad(drawAngle));this.ctx.translate(-centerX,-centerY);if(strokeStyle){this.ctx.strokeText(character,centerX,centerY+radius+lineOffset);}
|
||||||
|
if(fillStyle){this.ctx.fillText(character,centerX,centerY+radius+lineOffset);}
|
||||||
|
drawAngle+=anglePerChar;this.ctx.restore();}}}else{if(orientation=='horizontal'){if(alignment=='inner'){this.ctx.textAlign='left';}else if(alignment=='outer'){this.ctx.textAlign='right';}else{this.ctx.textAlign='center';}
|
||||||
|
this.ctx.textBaseline='middle';let textAngle=this.degToRad(seg.endAngle-((seg.endAngle-seg.startAngle)/2)+this.rotationAngle-90);this.ctx.save();this.ctx.translate(centerX,centerY);this.ctx.rotate(textAngle);this.ctx.translate(-centerX,-centerY);if(alignment=='inner'){if(fillStyle){this.ctx.fillText(lines[i],centerX+innerRadius+margin,centerY+lineOffset);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(lines[i],centerX+innerRadius+margin,centerY+lineOffset);}}else if(alignment=='outer'){if(fillStyle){this.ctx.fillText(lines[i],centerX+outerRadius-margin,centerY+lineOffset);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(lines[i],centerX+outerRadius-margin,centerY+lineOffset);}}else{if(fillStyle){this.ctx.fillText(lines[i],centerX+innerRadius+((outerRadius-innerRadius)/2)+margin,centerY+lineOffset);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(lines[i],centerX+innerRadius+((outerRadius-innerRadius)/2)+margin,centerY+lineOffset);}}
|
||||||
|
this.ctx.restore();}else if(orientation=='vertical'){this.ctx.textAlign='center';if(alignment=='inner'){this.ctx.textBaseline='bottom';}else if(alignment=='outer'){this.ctx.textBaseline='top';}else{this.ctx.textBaseline='middle';}
|
||||||
|
let textAngle=seg.endAngle-((seg.endAngle-seg.startAngle)/2);textAngle+=this.rotationAngle;this.ctx.save();this.ctx.translate(centerX,centerY);this.ctx.rotate(this.degToRad(textAngle));this.ctx.translate(-centerX,-centerY);let yPos=0;if(alignment=='outer'){yPos=(centerY-outerRadius+margin);}else if(alignment=='inner'){yPos=(centerY-innerRadius-margin);}
|
||||||
|
let yInc=(fontSize-(fontSize/9));if(alignment=='outer'){for(let c=0;c<lines[i].length;c++){let character=lines[i].charAt(c);if(fillStyle){this.ctx.fillText(character,centerX+lineOffset,yPos);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(character,centerX+lineOffset,yPos);}
|
||||||
|
yPos+=yInc;}}else if(alignment=='inner'){for(let c=(lines[i].length-1);c>=0;c--){let character=lines[i].charAt(c);if(fillStyle){this.ctx.fillText(character,centerX+lineOffset,yPos);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(character,centerX+lineOffset,yPos);}
|
||||||
|
yPos-=yInc;}}else if(alignment=='center'){let centerAdjustment=0;if(lines[i].length>1){centerAdjustment=(yInc*(lines[i].length-1)/2);}
|
||||||
|
let yPos=(centerY-innerRadius-((outerRadius-innerRadius)/2))-centerAdjustment-margin;for(let c=0;c<lines[i].length;c++){let character=lines[i].charAt(c);if(fillStyle){this.ctx.fillText(character,centerX+lineOffset,yPos);}
|
||||||
|
if(strokeStyle){this.ctx.strokeText(character,centerX+lineOffset,yPos);}
|
||||||
|
yPos+=yInc;}}
|
||||||
|
this.ctx.restore();}else if(orientation=='curved'){let radius=0;if(alignment=='inner'){radius=innerRadius+margin;this.ctx.textBaseline='bottom';radius+=(fontSize*(lines.length-1));}else if(alignment=='outer'){radius=outerRadius-margin;this.ctx.textBaseline='top';}else if(alignment=='center'){radius=innerRadius+margin+((outerRadius-innerRadius)/2);this.ctx.textBaseline='middle';}
|
||||||
|
let anglePerChar=0;let drawAngle=0;if(lines[i].length>1){this.ctx.textAlign='left';anglePerChar=(4*(fontSize/10));let radiusPercent=(100/radius);anglePerChar=(anglePerChar*radiusPercent);let totalArc=(anglePerChar*lines[i].length);drawAngle=seg.startAngle+(((seg.endAngle-seg.startAngle)/2)-(totalArc/2));}else{drawAngle=(seg.startAngle+((seg.endAngle-seg.startAngle)/2));this.ctx.textAlign='center';}
|
||||||
|
drawAngle+=this.rotationAngle;for(let c=0;c<(lines[i].length);c++){this.ctx.save();let character=lines[i].charAt(c);this.ctx.translate(centerX,centerY);this.ctx.rotate(this.degToRad(drawAngle));this.ctx.translate(-centerX,-centerY);if(strokeStyle){this.ctx.strokeText(character,centerX,centerY-radius+lineOffset);}
|
||||||
|
if(fillStyle){this.ctx.fillText(character,centerX,centerY-radius+lineOffset);}
|
||||||
|
drawAngle+=anglePerChar;this.ctx.restore();}}}
|
||||||
|
lineOffset+=fontSize;}}
|
||||||
|
this.ctx.restore();}}}
|
||||||
|
Winwheel.prototype.degToRad=function(d)
|
||||||
|
{return d*0.0174532925199432957;}
|
||||||
|
Winwheel.prototype.setCenter=function(x,y)
|
||||||
|
{this.centerX=x;this.centerY=y;}
|
||||||
|
Winwheel.prototype.addSegment=function(options,position)
|
||||||
|
{let newSegment=new Segment(options);this.numSegments++;let segmentPos;if(typeof position!=='undefined'){for(let x=this.numSegments;x>position;x--){this.segments[x]=this.segments[x-1];}
|
||||||
|
this.segments[position]=newSegment;segmentPos=position;}else{this.segments[this.numSegments]=newSegment;segmentPos=this.numSegments;}
|
||||||
|
this.updateSegmentSizes();return this.segments[segmentPos];}
|
||||||
|
Winwheel.prototype.setCanvasId=function(canvasId)
|
||||||
|
{if(canvasId){this.canvasId=canvasId;this.canvas=document.getElementById(this.canvasId);if(this.canvas){this.ctx=this.canvas.getContext('2d');}}else{this.canvasId=null
|
||||||
|
this.ctx=null;this.canvas=null;}}
|
||||||
|
Winwheel.prototype.deleteSegment=function(position)
|
||||||
|
{if(this.numSegments>1){if(typeof position!=='undefined'){for(let x=position;x<this.numSegments;x++){this.segments[x]=this.segments[x+1];}}
|
||||||
|
this.segments[this.numSegments]=undefined;this.numSegments--;this.updateSegmentSizes();}}
|
||||||
|
Winwheel.prototype.windowToCanvas=function(x,y)
|
||||||
|
{let bbox=this.canvas.getBoundingClientRect();return{x:Math.floor(x-bbox.left*(this.canvas.width/bbox.width)),y:Math.floor(y-bbox.top*(this.canvas.height/bbox.height))};}
|
||||||
|
Winwheel.prototype.getSegmentAt=function(x,y)
|
||||||
|
{let foundSegment=null;let segmentNumber=this.getSegmentNumberAt(x,y);if(segmentNumber!==null){foundSegment=this.segments[segmentNumber];}
|
||||||
|
return foundSegment;}
|
||||||
|
Winwheel.prototype.getSegmentNumberAt=function(x,y)
|
||||||
|
{let loc=this.windowToCanvas(x,y);let topBottom;let leftRight;let adjacentSideLength;let oppositeSideLength;let hypotenuseSideLength;let centerX=(this.centerX*this.scaleFactor);let centerY=(this.centerY*this.scaleFactor);let outerRadius=(this.outerRadius*this.scaleFactor);let innerRadius=(this.innerRadius*this.scaleFactor);if(loc.x>centerX){adjacentSideLength=(loc.x-centerX);leftRight='R';}else{adjacentSideLength=(centerX-loc.x);leftRight='L';}
|
||||||
|
if(loc.y>centerY){oppositeSideLength=(loc.y-centerY);topBottom='B';}else{oppositeSideLength=(centerY-loc.y);topBottom='T';}
|
||||||
|
let tanVal=oppositeSideLength/adjacentSideLength;let result=(Math.atan(tanVal)*180/Math.PI);let locationAngle=0;hypotenuseSideLength=Math.sqrt((oppositeSideLength*oppositeSideLength)+(adjacentSideLength*adjacentSideLength));if((topBottom=='T')&&(leftRight=='R')){locationAngle=Math.round(90-result);}else if((topBottom=='B')&&(leftRight=='R')){locationAngle=Math.round(result+90);}else if((topBottom=='B')&&(leftRight=='L')){locationAngle=Math.round((90-result)+180);}else if((topBottom=='T')&&(leftRight=='L')){locationAngle=Math.round(result+270);}
|
||||||
|
if(this.rotationAngle!=0){let rotatedPosition=this.getRotationPosition();locationAngle=(locationAngle-rotatedPosition);if(locationAngle<0){locationAngle=(360-Math.abs(locationAngle));}}
|
||||||
|
let foundSegmentNumber=null;for(let x=1;x<=this.numSegments;x++){if((locationAngle>=this.segments[x].startAngle)&&(locationAngle<=this.segments[x].endAngle)){if((hypotenuseSideLength>=innerRadius)&&(hypotenuseSideLength<=outerRadius)){foundSegmentNumber=x;break;}}}
|
||||||
|
return foundSegmentNumber;}
|
||||||
|
Winwheel.prototype.getIndicatedSegment=function()
|
||||||
|
{let prizeNumber=this.getIndicatedSegmentNumber();return this.segments[prizeNumber];}
|
||||||
|
Winwheel.prototype.getIndicatedSegmentNumber=function()
|
||||||
|
{let indicatedPrize=0;let rawAngle=this.getRotationPosition();let relativeAngle=Math.floor(this.pointerAngle-rawAngle);if(relativeAngle<0){relativeAngle=360-Math.abs(relativeAngle);}
|
||||||
|
for(let x=1;x<(this.segments.length);x++){if((relativeAngle>=this.segments[x]['startAngle'])&&(relativeAngle<=this.segments[x]['endAngle'])){indicatedPrize=x;break;}}
|
||||||
|
return indicatedPrize;}
|
||||||
|
Winwheel.prototype.getCurrentPinNumber=function()
|
||||||
|
{let currentPin=0;if(this.pins){let rawAngle=this.getRotationPosition();let relativeAngle=Math.floor(this.pointerAngle-rawAngle);if(relativeAngle<0){relativeAngle=360-Math.abs(relativeAngle);}
|
||||||
|
let pinSpacing=(360/this.pins.number);let totalPinAngle=0;for(let x=0;x<(this.pins.number);x++){if((relativeAngle>=totalPinAngle)&&(relativeAngle<=(totalPinAngle+pinSpacing))){currentPin=x;break;}
|
||||||
|
totalPinAngle+=pinSpacing;}
|
||||||
|
if(this.animation.direction=='clockwise'){currentPin++;if(currentPin>this.pins.number){currentPin=0;}}}
|
||||||
|
return currentPin;}
|
||||||
|
Winwheel.prototype.getRotationPosition=function()
|
||||||
|
{let rawAngle=this.rotationAngle;if(rawAngle>=0){if(rawAngle>360){let timesPast360=Math.floor(rawAngle/360);rawAngle=(rawAngle-(360*timesPast360));}}else{if(rawAngle<-360){let timesPast360=Math.ceil(rawAngle/360);rawAngle=(rawAngle-(360*timesPast360));}
|
||||||
|
rawAngle=(360+rawAngle);}
|
||||||
|
return rawAngle;}
|
||||||
|
Winwheel.prototype.startAnimation=function()
|
||||||
|
{if(this.animation){this.computeAnimation();winwheelToDrawDuringAnimation=this;let properties=new Array(null);properties[this.animation.propertyName]=this.animation.propertyValue;properties['yoyo']=this.animation.yoyo;properties['repeat']=this.animation.repeat;properties['ease']=this.animation.easing;properties['onUpdate']=winwheelAnimationLoop;properties['onComplete']=winwheelStopAnimation;this.tween=TweenMax.to(this,this.animation.duration,properties);}}
|
||||||
|
Winwheel.prototype.stopAnimation=function(canCallback)
|
||||||
|
{if(winwheelToDrawDuringAnimation){if(winwheelToDrawDuringAnimation.tween){winwheelToDrawDuringAnimation.tween.kill();}
|
||||||
|
winwheelStopAnimation(canCallback);}
|
||||||
|
winwheelToDrawDuringAnimation=this;}
|
||||||
|
Winwheel.prototype.pauseAnimation=function()
|
||||||
|
{if(this.tween){this.tween.pause();}}
|
||||||
|
Winwheel.prototype.resumeAnimation=function()
|
||||||
|
{if(this.tween){this.tween.play();}}
|
||||||
|
Winwheel.prototype.computeAnimation=function()
|
||||||
|
{if(this.animation){if(this.animation.type=='spinOngoing'){this.animation.propertyName='rotationAngle';if(this.animation.spins==null){this.animation.spins=5;}
|
||||||
|
if(this.animation.repeat==null){this.animation.repeat=-1;}
|
||||||
|
if(this.animation.easing==null){this.animation.easing='Linear.easeNone';}
|
||||||
|
if(this.animation.yoyo==null){this.animation.yoyo=false;}
|
||||||
|
this.animation.propertyValue=(this.animation.spins*360);if(this.animation.direction=='anti-clockwise'){this.animation.propertyValue=(0-this.animation.propertyValue);}}else if(this.animation.type=='spinToStop'){this.animation.propertyName='rotationAngle';if(this.animation.spins==null){this.animation.spins=5;}
|
||||||
|
if(this.animation.repeat==null){this.animation.repeat=0;}
|
||||||
|
if(this.animation.easing==null){this.animation.easing='Power3.easeOut';}
|
||||||
|
if(this.animation.stopAngle==null){this.animation._stopAngle=Math.floor((Math.random()*359));}else{this.animation._stopAngle=(360-this.animation.stopAngle+this.pointerAngle);}
|
||||||
|
if(this.animation.yoyo==null){this.animation.yoyo=false;}
|
||||||
|
this.animation.propertyValue=(this.animation.spins*360);if(this.animation.direction=='anti-clockwise'){this.animation.propertyValue=(0-this.animation.propertyValue);this.animation.propertyValue-=(360-this.animation._stopAngle);}else{this.animation.propertyValue+=this.animation._stopAngle;}}else if(this.animation.type=='spinAndBack'){this.animation.propertyName='rotationAngle';if(this.animation.spins==null){this.animation.spins=5;}
|
||||||
|
if(this.animation.repeat==null){this.animation.repeat=1;}
|
||||||
|
if(this.animation.easing==null){this.animation.easing='Power2.easeInOut';}
|
||||||
|
if(this.animation.yoyo==null){this.animation.yoyo=true;}
|
||||||
|
if(this.animation.stopAngle==null){this.animation._stopAngle=0;}else{this.animation._stopAngle=(360-this.animation.stopAngle);}
|
||||||
|
this.animation.propertyValue=(this.animation.spins*360);if(this.animation.direction=='anti-clockwise'){this.animation.propertyValue=(0-this.animation.propertyValue);this.animation.propertyValue-=(360-this.animation._stopAngle);}else{this.animation.propertyValue+=this.animation._stopAngle;}}else if(this.animation.type=='custom'){}}}
|
||||||
|
Winwheel.prototype.getRandomForSegment=function(segmentNumber)
|
||||||
|
{let stopAngle=0;if(segmentNumber){if(typeof this.segments[segmentNumber]!=='undefined'){let startAngle=this.segments[segmentNumber].startAngle;let endAngle=this.segments[segmentNumber].endAngle;let range=(endAngle-startAngle)-2;if(range>0){stopAngle=(startAngle+1+Math.floor((Math.random()*range)));}else{console.log('Segment size is too small to safely get random angle inside it');}}else{console.log('Segment '+segmentNumber+' undefined');}}else{console.log('Segment number not specified');}
|
||||||
|
return stopAngle;}
|
||||||
|
function Pin(options)
|
||||||
|
{let defaultOptions={'visible':true,'number':36,'outerRadius':3,'fillStyle':'grey','strokeStyle':'black','lineWidth':1,'margin':3,'responsive':false,};for(let key in defaultOptions){if((options!=null)&&(typeof(options[key])!=='undefined')){this[key]=options[key];}else{this[key]=defaultOptions[key];}}
|
||||||
|
if(options!=null){for(let key in options){if(typeof(this[key])==='undefined'){this[key]=options[key];}}}}
|
||||||
|
function Animation(options)
|
||||||
|
{let defaultOptions={'type':'spinOngoing','direction':'clockwise','propertyName':null,'propertyValue':null,'duration':10,'yoyo':false,'repeat':null,'easing':null,'stopAngle':null,'spins':null,'clearTheCanvas':null,'callbackFinished':null,'callbackBefore':null,'callbackAfter':null,'callbackSound':null,'soundTrigger':'segment'};for(let key in defaultOptions){if((options!=null)&&(typeof(options[key])!=='undefined')){this[key]=options[key];}else{this[key]=defaultOptions[key];}}
|
||||||
|
if(options!=null){for(let key in options){if(typeof(this[key])==='undefined'){this[key]=options[key];}}}}
|
||||||
|
function Segment(options)
|
||||||
|
{let defaultOptions={'size':null,'text':'','fillStyle':null,'strokeStyle':null,'lineWidth':null,'textFontFamily':null,'textFontSize':null,'textFontWeight':null,'textOrientation':null,'textAlignment':null,'textDirection':null,'textMargin':null,'textFillStyle':null,'textStrokeStyle':null,'textLineWidth':null,'image':null,'imageDirection':null,'imgData':null};for(let key in defaultOptions){if((options!=null)&&(typeof(options[key])!=='undefined')){this[key]=options[key];}else{this[key]=defaultOptions[key];}}
|
||||||
|
if(options!=null){for(let key in options){if(typeof(this[key])==='undefined'){this[key]=options[key];}}}
|
||||||
|
this.startAngle=0;this.endAngle=0;}
|
||||||
|
Segment.prototype.changeImage=function(image,imageDirection)
|
||||||
|
{this.image=image;this.imgData=null;if(imageDirection){this.imageDirection=imageDirection;}
|
||||||
|
winhweelAlreadyDrawn=false;this.imgData=new Image();this.imgData.onload=winwheelLoadedImage;this.imgData.src=this.image;}
|
||||||
|
function PointerGuide(options)
|
||||||
|
{let defaultOptions={'display':false,'strokeStyle':'red','lineWidth':3};for(let key in defaultOptions){if((options!=null)&&(typeof(options[key])!=='undefined')){this[key]=options[key];}else{this[key]=defaultOptions[key];}}}
|
||||||
|
function winwheelPercentToDegrees(percentValue)
|
||||||
|
{let degrees=0;if((percentValue>0)&&(percentValue<=100)){let divider=(percentValue/100);degrees=(360*divider);}
|
||||||
|
return degrees;}
|
||||||
|
function winwheelAnimationLoop()
|
||||||
|
{if(winwheelToDrawDuringAnimation){if(winwheelToDrawDuringAnimation.animation.clearTheCanvas!=false){winwheelToDrawDuringAnimation.ctx.clearRect(0,0,winwheelToDrawDuringAnimation.canvas.width,winwheelToDrawDuringAnimation.canvas.height);}
|
||||||
|
let callbackBefore=winwheelToDrawDuringAnimation.animation.callbackBefore;let callbackAfter=winwheelToDrawDuringAnimation.animation.callbackAfter;if(callbackBefore!=null){if(typeof callbackBefore==='function'){callbackBefore();}else{eval(callbackBefore);}}
|
||||||
|
winwheelToDrawDuringAnimation.draw(false);if(callbackAfter!=null){if(typeof callbackAfter==='function'){callbackAfter();}else{eval(callbackAfter);}}
|
||||||
|
if(winwheelToDrawDuringAnimation.animation.callbackSound){winwheelTriggerSound();}}}
|
||||||
|
function winwheelTriggerSound()
|
||||||
|
{if(winwheelToDrawDuringAnimation.hasOwnProperty('_lastSoundTriggerNumber')==false){winwheelToDrawDuringAnimation._lastSoundTriggerNumber=0;}
|
||||||
|
let callbackSound=winwheelToDrawDuringAnimation.animation.callbackSound;let currentTriggerNumber=0;if(winwheelToDrawDuringAnimation.animation.soundTrigger=='pin'){currentTriggerNumber=winwheelToDrawDuringAnimation.getCurrentPinNumber();}else{currentTriggerNumber=winwheelToDrawDuringAnimation.getIndicatedSegmentNumber();}
|
||||||
|
if(currentTriggerNumber!=winwheelToDrawDuringAnimation._lastSoundTriggerNumber){if(typeof callbackSound==='function'){callbackSound();}else{eval(callbackSound);}
|
||||||
|
winwheelToDrawDuringAnimation._lastSoundTriggerNumber=currentTriggerNumber;}}
|
||||||
|
let winwheelToDrawDuringAnimation=null;function winwheelStopAnimation(canCallback)
|
||||||
|
{if(canCallback!=false){let callback=winwheelToDrawDuringAnimation.animation.callbackFinished;if(callback!=null){if(typeof callback==='function'){callback(winwheelToDrawDuringAnimation.getIndicatedSegment());}else{eval(callback);}}}}
|
||||||
|
let winhweelAlreadyDrawn=false;function winwheelLoadedImage()
|
||||||
|
{if(winhweelAlreadyDrawn==false){let winwheelImageLoadCount=0;for(let i=1;i<=winwheelToDrawDuringAnimation.numSegments;i++){if((winwheelToDrawDuringAnimation.segments[i].imgData!=null)&&(winwheelToDrawDuringAnimation.segments[i].imgData.height)){winwheelImageLoadCount++;}}
|
||||||
|
if(winwheelImageLoadCount==winwheelToDrawDuringAnimation.numSegments){winhweelAlreadyDrawn=true;winwheelToDrawDuringAnimation.draw();}}}
|
||||||
|
function winwheelResize()
|
||||||
|
{let margin=40;if(typeof(winwheelToDrawDuringAnimation._responsiveMargin)!=='undefined'){margin=winwheelToDrawDuringAnimation._responsiveMargin;}
|
||||||
|
let width=window.innerWidth-margin;let minWidth=winwheelToDrawDuringAnimation._responsiveMinWidth;let minHeight=winwheelToDrawDuringAnimation._responsiveMinHeight;if(width<minWidth){width=minWidth;}else if(width>winwheelToDrawDuringAnimation._originalCanvasWidth){width=winwheelToDrawDuringAnimation._originalCanvasWidth;}
|
||||||
|
let percent=(width/winwheelToDrawDuringAnimation._originalCanvasWidth);winwheelToDrawDuringAnimation.canvas.width=(winwheelToDrawDuringAnimation._originalCanvasWidth*percent);if(winwheelToDrawDuringAnimation._responsiveScaleHeight){let height=(winwheelToDrawDuringAnimation._originalCanvasHeight*percent);if(height<minHeight){height=minHeight;}else if(height>winwheelToDrawDuringAnimation._originalCanvasHeight){height=winwheelToDrawDuringAnimation._originalCanvasHeight;}
|
||||||
|
winwheelToDrawDuringAnimation.canvas.height=height;}
|
||||||
|
winwheelToDrawDuringAnimation.scaleFactor=percent;winwheelToDrawDuringAnimation.draw();}
|
@ -0,0 +1 @@
|
|||||||
|
.elementor-443 .elementor-element.elementor-element-55a9332{padding:0}.elementor-443 .elementor-element.elementor-element-976a94c>.elementor-element-populated{padding:10px}.elementor-443 .elementor-element.elementor-element-bffad37 .hfe-copyright-wrapper{text-align:center}@media(max-width:1024px){.elementor-443 .elementor-element.elementor-element-55a9332{padding:20px}}@media(max-width:767px){.elementor-443 .elementor-element.elementor-element-bffad37 .hfe-copyright-wrapper{text-align:center}}
|
BIN
bocciofila/bgdottedeven.png
Normal file
BIN
bocciofila/bgdottedeven.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 300 B |
BIN
bocciofila/bravifatelogirare.ogg
Normal file
BIN
bocciofila/bravifatelogirare.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/1.ogg
Normal file
BIN
bocciofila/cheers/1.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/10.ogg
Normal file
BIN
bocciofila/cheers/10.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/11.ogg
Normal file
BIN
bocciofila/cheers/11.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/12.ogg
Normal file
BIN
bocciofila/cheers/12.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/13.ogg
Normal file
BIN
bocciofila/cheers/13.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/14.ogg
Normal file
BIN
bocciofila/cheers/14.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/2.ogg
Normal file
BIN
bocciofila/cheers/2.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/3.ogg
Normal file
BIN
bocciofila/cheers/3.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/4.ogg
Normal file
BIN
bocciofila/cheers/4.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/5.ogg
Normal file
BIN
bocciofila/cheers/5.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/6.ogg
Normal file
BIN
bocciofila/cheers/6.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/7.ogg
Normal file
BIN
bocciofila/cheers/7.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/8.ogg
Normal file
BIN
bocciofila/cheers/8.ogg
Normal file
Binary file not shown.
BIN
bocciofila/cheers/9.ogg
Normal file
BIN
bocciofila/cheers/9.ogg
Normal file
Binary file not shown.
65
bocciofila/clippy.js
Normal file
65
bocciofila/clippy.js
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
import clippy from '../clippy/dist/index.js'
|
||||||
|
|
||||||
|
const ClippyDemo = (function() {
|
||||||
|
const availableAgents = ['Bonzi', 'Clippy', 'F1', 'Genie', 'Genius', 'Links', 'Merlin', 'Peedy', 'Rocky', 'Rover']
|
||||||
|
const talks = [
|
||||||
|
'How can i help you?',
|
||||||
|
'Nice day!',
|
||||||
|
'Glad to meet you.',
|
||||||
|
'At your service',
|
||||||
|
'Helloo'
|
||||||
|
]
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
this.$el = document.querySelector('.my-clippy')
|
||||||
|
}
|
||||||
|
|
||||||
|
function nextAgent() {
|
||||||
|
// let agentName = availableAgents[Math.floor(Math.random() * (availableAgents.length))]
|
||||||
|
let agentName = 'Clippy';
|
||||||
|
if (!agentName) return;
|
||||||
|
|
||||||
|
clippy.load({
|
||||||
|
name: agentName,
|
||||||
|
selector: "my-clippy",
|
||||||
|
successCb: agent => {
|
||||||
|
window[agentName] = agent
|
||||||
|
agent.show();
|
||||||
|
|
||||||
|
// Speak on click and start
|
||||||
|
const speak = () => {
|
||||||
|
agent.speak('I am ' + agentName + ', ' + talks[~~(Math.random() * talks.length)])
|
||||||
|
agent.animate()
|
||||||
|
}
|
||||||
|
agent._el.addEventListener('click', () =>{
|
||||||
|
document.getElementById("legend-modal").style.display = "block";
|
||||||
|
return;
|
||||||
|
});
|
||||||
|
speak()
|
||||||
|
|
||||||
|
// Animate randomly
|
||||||
|
setInterval(() => {
|
||||||
|
agent.animate()
|
||||||
|
}, 3000 + (Math.random() * 4000))
|
||||||
|
setInterval(() => speak(), 15000 + (Math.random() * 4000));
|
||||||
|
speak()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function destroy() {
|
||||||
|
this.$el.innerHTML = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
init,
|
||||||
|
nextAgent,
|
||||||
|
destroy,
|
||||||
|
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
|
||||||
|
window.onload = () => {
|
||||||
|
ClippyDemo.init();
|
||||||
|
ClippyDemo.nextAgent();
|
||||||
|
}
|
21
bocciofila/confetti.css
Normal file
21
bocciofila/confetti.css
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
.confetti{
|
||||||
|
max-width: 640px;
|
||||||
|
display: block;
|
||||||
|
margin: 0 auto;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
#wheel-container {
|
||||||
|
position: relative;
|
||||||
|
left: 30%;
|
||||||
|
}
|
||||||
|
.wheel-tab-section {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#main {
|
||||||
|
background-image: url("./bgdottedeven.png");
|
||||||
|
background-color:#fff4f6;
|
||||||
|
/* Additional background styles if needed */
|
||||||
|
}
|
||||||
|
*{cursor: url("pincursorsh.png"), default;}
|
||||||
|
|
180
bocciofila/confetti.js
Normal file
180
bocciofila/confetti.js
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
//-----------Var Inits--------------
|
||||||
|
canvas = document.getElementById("confetti");
|
||||||
|
ctx = canvas.getContext("2d");
|
||||||
|
canvas.width = window.innerWidth;
|
||||||
|
canvas.height = window.innerHeight;
|
||||||
|
cx = ctx.canvas.width / 2;
|
||||||
|
cy = ctx.canvas.height / 2;
|
||||||
|
|
||||||
|
let confetti = [];
|
||||||
|
const confettiCount = 300;
|
||||||
|
const gravity = 0.5;
|
||||||
|
const terminalVelocity = 5;
|
||||||
|
const drag = 0.075;
|
||||||
|
const colors = [
|
||||||
|
{ front: 'red', back: 'darkred' },
|
||||||
|
{ front: 'green', back: 'darkgreen' },
|
||||||
|
{ front: 'blue', back: 'darkblue' },
|
||||||
|
{ front: 'yellow', back: 'darkyellow' },
|
||||||
|
{ front: 'orange', back: 'darkorange' },
|
||||||
|
{ front: 'pink', back: 'darkpink' },
|
||||||
|
{ front: 'purple', back: 'darkpurple' },
|
||||||
|
{ front: 'turquoise', back: 'darkturquoise' }];
|
||||||
|
|
||||||
|
|
||||||
|
//-----------Functions--------------
|
||||||
|
resizeCanvas = () => {
|
||||||
|
canvas.width = window.innerWidth;
|
||||||
|
canvas.height = window.innerHeight;
|
||||||
|
cx = ctx.canvas.width / 2;
|
||||||
|
cy = ctx.canvas.height / 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
randomRange = (min, max) => Math.random() * (max - min) + min;
|
||||||
|
|
||||||
|
initConfetti = () => {
|
||||||
|
for (let i = 0; i < confettiCount; i++) {
|
||||||
|
confetti.push({
|
||||||
|
color: colors[Math.floor(randomRange(0, colors.length))],
|
||||||
|
dimensions: {
|
||||||
|
x: randomRange(10, 20),
|
||||||
|
y: randomRange(10, 30) },
|
||||||
|
|
||||||
|
position: {
|
||||||
|
x: randomRange(0, canvas.width),
|
||||||
|
y: canvas.height - 1 },
|
||||||
|
|
||||||
|
rotation: randomRange(0, 2 * Math.PI),
|
||||||
|
scale: {
|
||||||
|
x: 1,
|
||||||
|
y: 1 },
|
||||||
|
|
||||||
|
velocity: {
|
||||||
|
x: randomRange(-25, 25),
|
||||||
|
y: randomRange(0, -50) } });
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//---------Render-----------
|
||||||
|
function render (canvas) {
|
||||||
|
|
||||||
|
let ctx = canvas.getContext('2d');
|
||||||
|
canvas.width = window.innerWidth;
|
||||||
|
canvas.height = window.innerHeight;
|
||||||
|
let cx = ctx.canvas.width / 2;
|
||||||
|
let cy = ctx.canvas.height / 2;
|
||||||
|
|
||||||
|
|
||||||
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
|
|
||||||
|
confetti.forEach((confetto, index) => {
|
||||||
|
let width = confetto.dimensions.x * confetto.scale.x;
|
||||||
|
let height = confetto.dimensions.y * confetto.scale.y;
|
||||||
|
|
||||||
|
// Move canvas to position and rotate
|
||||||
|
ctx.translate(confetto.position.x, confetto.position.y);
|
||||||
|
ctx.rotate(confetto.rotation);
|
||||||
|
|
||||||
|
// Apply forces to velocity
|
||||||
|
confetto.velocity.x -= confetto.velocity.x * drag;
|
||||||
|
confetto.velocity.y = Math.min(confetto.velocity.y + gravity, terminalVelocity);
|
||||||
|
confetto.velocity.x += Math.random() > 0.5 ? Math.random() : -Math.random();
|
||||||
|
|
||||||
|
// Set position
|
||||||
|
confetto.position.x += confetto.velocity.x;
|
||||||
|
confetto.position.y += confetto.velocity.y;
|
||||||
|
|
||||||
|
// Delete confetti when out of frame
|
||||||
|
if (confetto.position.y >= canvas.height) confetti.splice(index, 1);
|
||||||
|
|
||||||
|
// Loop confetto x position
|
||||||
|
if (confetto.position.x > canvas.width) confetto.position.x = 0;
|
||||||
|
if (confetto.position.x < 0) confetto.position.x = canvas.width;
|
||||||
|
|
||||||
|
// Spin confetto by scaling y
|
||||||
|
confetto.scale.y = Math.cos(confetto.position.y * 0.1);
|
||||||
|
ctx.fillStyle = confetto.scale.y > 0 ? confetto.color.front : confetto.color.back;
|
||||||
|
|
||||||
|
// Draw confetti
|
||||||
|
ctx.fillRect(-width / 2, -height / 2, width, height);
|
||||||
|
|
||||||
|
// Reset transform matrix
|
||||||
|
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Fire off another round of confetti
|
||||||
|
// if (confetti.length <= 10) initConfetti();
|
||||||
|
|
||||||
|
window.requestAnimationFrame(function() {render(canvas); });
|
||||||
|
};
|
||||||
|
|
||||||
|
//---------Execution--------
|
||||||
|
// initConfetti();
|
||||||
|
// render();
|
||||||
|
|
||||||
|
//----------Resize----------
|
||||||
|
window.addEventListener('resize', function () {
|
||||||
|
resizeCanvas();
|
||||||
|
});
|
||||||
|
|
||||||
|
//------------Click------------
|
||||||
|
// window.addEventListener('click', function () {
|
||||||
|
// initConfetti();
|
||||||
|
// });
|
||||||
|
function renderAnimation() {
|
||||||
|
// Create a new canvas element
|
||||||
|
var canvas = document.createElement('canvas');
|
||||||
|
|
||||||
|
// Set the canvas position to be fixed, covering the entire viewport
|
||||||
|
canvas.style.position = 'fixed';
|
||||||
|
canvas.style.top = '0';
|
||||||
|
canvas.style.left = '0';
|
||||||
|
canvas.style.width = '100%';
|
||||||
|
canvas.style.height = '100%';
|
||||||
|
|
||||||
|
// Make sure the canvas is displayed on top of other elements
|
||||||
|
canvas.style.zIndex = '9999';
|
||||||
|
|
||||||
|
// Append the canvas to the document body
|
||||||
|
document.body.appendChild(canvas);
|
||||||
|
|
||||||
|
// Get the rendering context for the canvas
|
||||||
|
let ctx = canvas.getContext('2d');
|
||||||
|
|
||||||
|
// Perform your animation logic here using the ctx object
|
||||||
|
|
||||||
|
// Example animation: drawing a red circle that moves diagonally
|
||||||
|
var x = 0;
|
||||||
|
var y = 0;
|
||||||
|
var radius = 50;
|
||||||
|
|
||||||
|
initConfetti();
|
||||||
|
render(canvas);
|
||||||
|
|
||||||
|
// Add a delay before removing the canvas (adjust the delay time as needed)
|
||||||
|
setTimeout(function() {
|
||||||
|
// Remove the canvas from the document body
|
||||||
|
document.body.removeChild(canvas);
|
||||||
|
}, 8000); // Animation duration in milliseconds
|
||||||
|
}
|
||||||
|
|
||||||
|
function disableScroll() {
|
||||||
|
document.addEventListener('wheel', preventDefault);
|
||||||
|
document.addEventListener('touchmove', preventDefault);
|
||||||
|
document.addEventListener('keydown', preventDefault);
|
||||||
|
}
|
||||||
|
|
||||||
|
function enableScroll() {
|
||||||
|
document.removeEventListener('wheel', preventDefault);
|
||||||
|
document.removeEventListener('touchmove', preventDefault);
|
||||||
|
document.removeEventListener('keydown', preventDefault);
|
||||||
|
}
|
||||||
|
|
||||||
|
function preventDefault(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call disableScroll() to disable scrolling
|
||||||
|
disableScroll();
|
19
bocciofila/cori.js
Normal file
19
bocciofila/cori.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
var audioFiles = [];
|
||||||
|
var numAudioFiles = 14;
|
||||||
|
|
||||||
|
// Preload the audio files
|
||||||
|
for (var i = 1; i <= numAudioFiles; i++) {
|
||||||
|
var coro = new Audio("cheers/" + i + ".ogg");
|
||||||
|
audioFiles.push(coro);
|
||||||
|
}
|
||||||
|
|
||||||
|
function coro() {
|
||||||
|
// Generate a random index between 0 and the number of audio files
|
||||||
|
var randomIndex = Math.floor(Math.random() * numAudioFiles);
|
||||||
|
|
||||||
|
// Get the randomly selected audio from the array
|
||||||
|
var c = audioFiles[randomIndex];
|
||||||
|
|
||||||
|
// Play the audio
|
||||||
|
c.play();
|
||||||
|
}
|
2
bocciofila/frontend.min.js
vendored
Normal file
2
bocciofila/frontend.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
56
bocciofila/home.html
Normal file
56
bocciofila/home.html
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title></title>
|
||||||
|
<link rel="stylesheet" href="style2.css">
|
||||||
|
</head>
|
||||||
|
<body style="background-color:#fff4f6;" background="https://softheartclinic.neocities.org/Visuals/bgdottedeven.png">
|
||||||
|
<button id="startButton">Avvia il gioco</button>
|
||||||
|
|
||||||
|
<div id="gameContainer">
|
||||||
|
<video id="gameVideo" controls>
|
||||||
|
<source src="audiovideo.webm" type="video/mp4">
|
||||||
|
</video>
|
||||||
|
<button id="toggleButton">Fanculo Mancini, io mi drogo</button>
|
||||||
|
|
||||||
|
<div class="my-clippy" id="my-clippy"></div>
|
||||||
|
<div id="legend-modal" class="modal">
|
||||||
|
<div class="modal-content" bgcolor="#ffe5e9" style="background-color:#ffe5e9;">
|
||||||
|
<h2>Legenda</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Horny: sei horny per Riccardo, gli metti la mano sulla coscia e non la lasci più andare</li>
|
||||||
|
<li>Egodeath: hai smesso di usare la prima persona singolare e plurale</li>
|
||||||
|
<li>Pappagallo: ripeti a pappagallo tutto quello che dice Riccardo</li>
|
||||||
|
<li>Gemello: ripeti tutte le azioni che Riccardo fa</li>
|
||||||
|
<li>Desiderio: Riccardo esprime un desiderio, tu lo realizzi</li>
|
||||||
|
<li>2 Desideri: Riccardo esprime due desideri, tu ne realizzi uno e fai il possibile per non</li>
|
||||||
|
<li>Schiavo: Riccarrdo farà la prima cosa che gli chiedi. Non devi chiedere con gentilezza</li>
|
||||||
|
<li>Niente nomi: amnesia collettiva, non ci ricordiamo i nostri nomi</li>
|
||||||
|
<li>Trivia</li>
|
||||||
|
<li>Complimento: fai un complimento a Riccardo. Non ho detto di non mentire</li>
|
||||||
|
<li>Strip: un indumento giù, e Riccardo segue</li>
|
||||||
|
<li>Flessioni: fai delle flessioni. Riccardo ne farà il doppio</li>
|
||||||
|
<li>Scelte sbagliate: è arrivato il momento di ricordare a Riccardo quali scelte</li>
|
||||||
|
<li>ha sbagliato nella vita</li>
|
||||||
|
<li>Coro: Riccardo ti insegna un coro</li>
|
||||||
|
<li>Selfie</li>
|
||||||
|
<li>Sexy selfie</li>
|
||||||
|
<li>USA: gli stati uniti sono un paese pericoloso. Fai la Cassandra</li>
|
||||||
|
<li>Culo al muro: tu e Riccardo vi odiate così tanto che tenete il culo attaccato</li>
|
||||||
|
<li>al muro, ai punti opposti della stanza</li>
|
||||||
|
<li>Verità: fai una domanda a Riccardo, deve rispondere sinceramente. Poi tocca a lui</li>
|
||||||
|
</ul>
|
||||||
|
<button id="close-button">Close</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="wheel"></div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<!-- <iframe id="gameIframe" src="./ruota.html" width="100%" height="100%" scrolling="no" frameborder="0"></iframe> -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="clippy.js" type="module"></script>
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
34
bocciofila/index.html
Normal file
34
bocciofila/index.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title></title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
background-color: #fff4f6;
|
||||||
|
}
|
||||||
|
|
||||||
|
#startButton {
|
||||||
|
cursor: pointer;
|
||||||
|
transform: scale(0.6);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body background="bgdottedeven.png">
|
||||||
|
<a href="#" onclick="startGame();">
|
||||||
|
<img src="landingfull.png" alt="Start Game" id="startButton">
|
||||||
|
</a>
|
||||||
|
<script>
|
||||||
|
function startGame() {
|
||||||
|
// Redirect to another page
|
||||||
|
window.location.href = "/bocciofila/home.html";
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
2
bocciofila/jquery.cookie.min.js
vendored
Normal file
2
bocciofila/jquery.cookie.min.js
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/*! jquery.cookie v1.4.1 | MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?a(require("jquery")):a(jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}});
|
5
bocciofila/jquery.min.js
vendored
Normal file
5
bocciofila/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
3
bocciofila/jquery.min_002.js
Normal file
3
bocciofila/jquery.min_002.js
Normal file
File diff suppressed because one or more lines are too long
BIN
bocciofila/landingfull.png
Normal file
BIN
bocciofila/landingfull.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.5 MiB |
55
bocciofila/lasfida.py
Normal file
55
bocciofila/lasfida.py
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import random
|
||||||
|
|
||||||
|
a = """La povertà è una brutta bestia ma ti fa scoprire la solidarietà.
|
||||||
|
Il tuo compagno di ponte Riccardo condivide un cicchetto di colluttorio con te"""
|
||||||
|
|
||||||
|
PENITENZE = [
|
||||||
|
"X punti",
|
||||||
|
"X punti per te e Riccardo",
|
||||||
|
"X punti per te e un altro infame",
|
||||||
|
"-X punti per Riccardo",
|
||||||
|
"-X punti per te e Riccardo",
|
||||||
|
"Sei ignorante, lanciagli il pezzo che hai appena estratto. Se non cade a terra, Ieso fa X punti",
|
||||||
|
"Sei horny per Riccardo e glielo devi far capire. Mano sulla coscia",
|
||||||
|
"Fai il pappagallo",
|
||||||
|
"Sei il gemello di Riccardo. Fai tutto quello che fa lui, meglio",
|
||||||
|
"Sei il gemello di Riccardo. Fai tutto quello che fa lui",
|
||||||
|
"Riccardo esprime un desiderio, tu lo realizzi",
|
||||||
|
"Riccardo esprime due desideri, tu ne realizzi uno e fai il possibile per non far avverare l'altro",
|
||||||
|
"Esprimi un desiderio, Riccardo lo avvererà",
|
||||||
|
"COLLUTTORIO",
|
||||||
|
"TRIVIA",
|
||||||
|
"Riccardo è la tua badante",
|
||||||
|
"Fai un complimento a Riccardo, un complimento falso?",
|
||||||
|
"Tu e Riccardo perdete un indumento",
|
||||||
|
"Fai delle flessioni. Riccardo ne farà il doppio",
|
||||||
|
"Sei un genitore severo, ricorda a Riccardo quale scelta sbagliata ha fatto nella vita",
|
||||||
|
"Ruba la sedia a Riccardo, lui sta in piedi per un po'",
|
||||||
|
"Fatti insegnare un coro",
|
||||||
|
"Fatti un selfie",
|
||||||
|
"Fatti mandare una sexy fotina col pelo",
|
||||||
|
"Fatti mandare vocalino sexy prima di andare a dormire stanotte",
|
||||||
|
"Gli USA sono un paese pericoloso. Spiegagli perchè farà una brutta fine",
|
||||||
|
]
|
||||||
|
|
||||||
|
PERIOD = 12
|
||||||
|
def perform_extraction(nround: int, requirements: set):
|
||||||
|
assert(nround < PERIOD)
|
||||||
|
assert(nround > 0)
|
||||||
|
|
||||||
|
range_ = 100 / (PERIOD - len(requirements)) * nround
|
||||||
|
r = random.uniform(0, 100)
|
||||||
|
if r < range_:
|
||||||
|
return random.choice(requirements)
|
||||||
|
else:
|
||||||
|
return random.choice(PENITENZE)
|
||||||
|
|
||||||
|
def advance(nround: int, last_choices: list):
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
# Requisiti:
|
||||||
|
# - ogni 12 estrazioni si deve garantire che almeno una di queste abbia risultato TRIVIA
|
||||||
|
# - ogni 12 estrazioni si deve garantire che almeno tre di queste abbiano risultato X
|
||||||
|
# - il risultato COLLUTTORIO può capitare solo una volta ogni 80 estrazioni
|
||||||
|
# - il risultato delle precedenti 6 estrazioni non si ripete, eccetto che per risultato X
|
BIN
bocciofila/mancini.mp4
Normal file
BIN
bocciofila/mancini.mp4
Normal file
Binary file not shown.
BIN
bocciofila/perv.gif
Normal file
BIN
bocciofila/perv.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 72 KiB |
BIN
bocciofila/pincursorsh.png
Normal file
BIN
bocciofila/pincursorsh.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 309 B |
2
bocciofila/preloaded-modules.min.js
vendored
Normal file
2
bocciofila/preloaded-modules.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
496
bocciofila/ruota.html
Normal file
496
bocciofila/ruota.html
Normal file
File diff suppressed because one or more lines are too long
90
bocciofila/script.js
Normal file
90
bocciofila/script.js
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
// var startButton = document.getElementById("startButton");
|
||||||
|
|
||||||
|
// startButton.addEventListener("click", function() {
|
||||||
|
let fun = function() {
|
||||||
|
|
||||||
|
startButton.style.display = "none";
|
||||||
|
|
||||||
|
// Ottieni il riferimento al contenitore del gioco
|
||||||
|
var gameContainer = document.getElementById("gameContainer");
|
||||||
|
var ruota = document.getElementById("gameIframe");
|
||||||
|
|
||||||
|
// Mostra il contenitore del gioco
|
||||||
|
gameContainer.style.display = "block";
|
||||||
|
var ruota = document.getElementById("block");
|
||||||
|
|
||||||
|
// Ottieni il riferimento al video del gioco
|
||||||
|
var gameVideo = document.getElementById("gameVideo");
|
||||||
|
|
||||||
|
// Avvia il video
|
||||||
|
gameVideo.play();
|
||||||
|
|
||||||
|
// Aggiungi una classe CSS per far girare la ruota
|
||||||
|
gameContainer.classList.add("spin");
|
||||||
|
loadIframeWithTimeout();
|
||||||
|
};
|
||||||
|
fun();
|
||||||
|
});
|
||||||
|
|
||||||
|
function loadIframeWithTimeout() {
|
||||||
|
// Specify the timeout duration in milliseconds (e.g., 3000ms = 3 seconds)
|
||||||
|
var timeoutDuration = 0;
|
||||||
|
|
||||||
|
// Wait for the specified timeout
|
||||||
|
setTimeout(function() {
|
||||||
|
// Create the iframe element
|
||||||
|
var iframe = document.createElement('iframe');
|
||||||
|
|
||||||
|
// Set the source URL of the iframe
|
||||||
|
iframe.src = './ruota.html';
|
||||||
|
|
||||||
|
// Set the desired attributes for the iframe
|
||||||
|
iframe.width = '100%';
|
||||||
|
iframe.height = '100%';
|
||||||
|
iframe.frameBorder = '0';
|
||||||
|
// Apply CSS styles to cut the left part and center the iframe
|
||||||
|
iframe.style.position = 'absolute';
|
||||||
|
// iframe.style.left = '50%';
|
||||||
|
// iframe.style.transform = 'translateX(-50%)';
|
||||||
|
|
||||||
|
// Append the iframe to the bottom of the document body
|
||||||
|
document.body.appendChild(iframe);
|
||||||
|
console.log("loaded");
|
||||||
|
}, timeoutDuration);
|
||||||
|
}
|
||||||
|
function disableScroll() {
|
||||||
|
document.addEventListener('wheel', preventDefault);
|
||||||
|
document.addEventListener('touchmove', preventDefault);
|
||||||
|
document.addEventListener('keydown', preventDefault);
|
||||||
|
}
|
||||||
|
|
||||||
|
function enableScroll() {
|
||||||
|
document.removeEventListener('wheel', preventDefault);
|
||||||
|
document.removeEventListener('touchmove', preventDefault);
|
||||||
|
document.removeEventListener('keydown', preventDefault);
|
||||||
|
}
|
||||||
|
|
||||||
|
function preventDefault(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call disableScroll() to disable scrolling
|
||||||
|
disableScroll();
|
||||||
|
var toggleButton = document.getElementById('toggleButton');
|
||||||
|
var contentDiv = document.getElementById('gameVideo');
|
||||||
|
|
||||||
|
toggleButton.addEventListener('click', function() {
|
||||||
|
if (contentDiv.style.display === 'none') {
|
||||||
|
contentDiv.style.display = 'block';
|
||||||
|
} else {
|
||||||
|
contentDiv.style.display = 'none';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// document.getElementById("legend-button").addEventListener("click", function() {
|
||||||
|
// document.getElementById("legend-modal").style.display = "block";
|
||||||
|
// });
|
||||||
|
|
||||||
|
document.getElementById("close-button").addEventListener("click", function() {
|
||||||
|
document.getElementById("legend-modal").style.display = "none";
|
||||||
|
});
|
1
bocciofila/script.min.js
vendored
Normal file
1
bocciofila/script.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
71
bocciofila/style2.css
Normal file
71
bocciofila/style2.css
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#gameContainer {
|
||||||
|
width: 400px;
|
||||||
|
height: auto;
|
||||||
|
margin: 0 auto; /* Centers the container horizontally */
|
||||||
|
display: none; /* Hides the container by default */
|
||||||
|
}
|
||||||
|
html, body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* #gameContainer { */
|
||||||
|
/* position: absolute; */
|
||||||
|
/* top: 0; */
|
||||||
|
/* left: 0; */
|
||||||
|
/* width: 100%; */
|
||||||
|
/* height: 100%; */
|
||||||
|
/* } */
|
||||||
|
|
||||||
|
#gameIframe {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
border: none;
|
||||||
|
/* display: none; /\* Hides the container by default *\/ */
|
||||||
|
margin: 0 auto; /* Centers the container horizontally */
|
||||||
|
}
|
||||||
|
.modal {
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
z-index: 999;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-content {
|
||||||
|
background-color: #fefefe;
|
||||||
|
margin: 20% auto;
|
||||||
|
padding: 20px;
|
||||||
|
border: 1px solid #888;
|
||||||
|
width: 80%;
|
||||||
|
max-width: 800px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#legend-button {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#legend-button img {
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
*{cursor: url("pincursorsh.png"), default;}
|
||||||
|
#my-clippy {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#my-clippy {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
padding: 100px;
|
||||||
|
}
|
BIN
bocciofila/tick.mp3
Normal file
BIN
bocciofila/tick.mp3
Normal file
Binary file not shown.
64
clippy/demo/demo.js
Executable file
64
clippy/demo/demo.js
Executable file
@ -0,0 +1,64 @@
|
|||||||
|
|
||||||
|
import clippy from '../dist/index.js'
|
||||||
|
|
||||||
|
const ClippyDemo = (function() {
|
||||||
|
const availableAgents = ['Bonzi', 'Clippy', 'F1', 'Genie', 'Genius', 'Links', 'Merlin', 'Peedy', 'Rocky', 'Rover']
|
||||||
|
const talks = [
|
||||||
|
'How can i help you?',
|
||||||
|
'Nice day!',
|
||||||
|
'Glad to meet you.',
|
||||||
|
'At your service',
|
||||||
|
'Helloo'
|
||||||
|
]
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
this.$el = document.querySelector('.my-clippy')
|
||||||
|
}
|
||||||
|
|
||||||
|
function nextAgent() {
|
||||||
|
let agentName = availableAgents[Math.floor(Math.random() * (availableAgents.length))]
|
||||||
|
if (!agentName) return;
|
||||||
|
|
||||||
|
clippy.load({
|
||||||
|
name: agentName,
|
||||||
|
selector: "my-clippy",
|
||||||
|
successCb: agent => {
|
||||||
|
window[agentName] = agent
|
||||||
|
agent.show();
|
||||||
|
|
||||||
|
// Speak on click and start
|
||||||
|
const speak = () => {
|
||||||
|
agent.speak('I am ' + agentName + ', ' + talks[~~(Math.random() * talks.length)])
|
||||||
|
agent.animate()
|
||||||
|
}
|
||||||
|
agent._el.addEventListener('click', () => speak());
|
||||||
|
speak()
|
||||||
|
|
||||||
|
// Animate randomly
|
||||||
|
setInterval(() => {
|
||||||
|
agent.animate()
|
||||||
|
}, 3000 + (Math.random() * 4000))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function destroy() {
|
||||||
|
this.$el.innerHTML = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
init,
|
||||||
|
nextAgent,
|
||||||
|
destroy,
|
||||||
|
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
|
||||||
|
window.onload = () => {
|
||||||
|
ClippyDemo.init();
|
||||||
|
ClippyDemo.nextAgent();
|
||||||
|
document.getElementById('next-agent').addEventListener('click', () => {
|
||||||
|
ClippyDemo.destroy();
|
||||||
|
ClippyDemo.nextAgent();
|
||||||
|
});
|
||||||
|
}
|
27
clippy/demo/index.html
Executable file
27
clippy/demo/index.html
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
html {
|
||||||
|
background: url('http://wallpapercave.com/wp/7VNksl0.jpg') no-repeat center center fixed;
|
||||||
|
-webkit-background-size: cover;
|
||||||
|
-moz-background-size: cover;
|
||||||
|
-o-background-size: cover;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
#next-agent {
|
||||||
|
font-size: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.my-clippy {
|
||||||
|
padding-top: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src="./demo.js" type="module"></script>
|
||||||
|
<button id="next-agent">Random agent</button>
|
||||||
|
<div class="my-clippy"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
117
clippy/dist/agent.d.ts
vendored
Normal file
117
clippy/dist/agent.d.ts
vendored
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
import { AgentWrapper } from './types';
|
||||||
|
export interface AgentOptions {
|
||||||
|
agent: AgentWrapper;
|
||||||
|
selector?: string;
|
||||||
|
}
|
||||||
|
export default class Agent {
|
||||||
|
private _queue;
|
||||||
|
private _el;
|
||||||
|
private _animator;
|
||||||
|
private _balloon;
|
||||||
|
private _hidden;
|
||||||
|
private _idleDfd?;
|
||||||
|
private _offset;
|
||||||
|
private _dragUpdateLoop?;
|
||||||
|
private _targetX?;
|
||||||
|
private _targetY?;
|
||||||
|
private _moveHandle?;
|
||||||
|
private _upHandle?;
|
||||||
|
constructor(options: AgentOptions);
|
||||||
|
/***
|
||||||
|
*
|
||||||
|
* @param {Number} x
|
||||||
|
* @param {Number} y
|
||||||
|
*/
|
||||||
|
gestureAt(x: number, y: number): boolean;
|
||||||
|
/***
|
||||||
|
*
|
||||||
|
* @param {Boolean=} fast
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
hide(fast: boolean, callback: () => void): void;
|
||||||
|
moveTo(x: number, y: number, duration: number): void;
|
||||||
|
private _playInternal;
|
||||||
|
play(animation: any, timeout?: number, cb?: Function): boolean;
|
||||||
|
/***
|
||||||
|
*
|
||||||
|
* @param {Boolean=} fast
|
||||||
|
*/
|
||||||
|
show(fast?: boolean): boolean | undefined;
|
||||||
|
/***
|
||||||
|
*
|
||||||
|
* @param {String} text
|
||||||
|
*/
|
||||||
|
speak(text: string, hold?: boolean): void;
|
||||||
|
/***
|
||||||
|
* Close the current balloon
|
||||||
|
*/
|
||||||
|
closeBalloon(): void;
|
||||||
|
delay(time: number): void;
|
||||||
|
/***
|
||||||
|
* Skips the current animation
|
||||||
|
*/
|
||||||
|
stopCurrent(): void;
|
||||||
|
stop(): void;
|
||||||
|
/***
|
||||||
|
*
|
||||||
|
* @param {String} name
|
||||||
|
* @returns {Boolean}
|
||||||
|
*/
|
||||||
|
hasAnimation(name: string): boolean;
|
||||||
|
/***
|
||||||
|
* Gets a list of animation names
|
||||||
|
*
|
||||||
|
* @return {Array.<string>}
|
||||||
|
*/
|
||||||
|
animations(): string[];
|
||||||
|
/***
|
||||||
|
* Play a random animation
|
||||||
|
* @return {Deferred}
|
||||||
|
*/
|
||||||
|
animate(): any;
|
||||||
|
/**************************** Utils ************************************/
|
||||||
|
/***
|
||||||
|
*
|
||||||
|
* @param {Number} x
|
||||||
|
* @param {Number} y
|
||||||
|
* @return {String}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
private _getDirection;
|
||||||
|
/**************************** Queue and Idle handling ************************************/
|
||||||
|
/***
|
||||||
|
* Handle empty queue.
|
||||||
|
* We need to transition the animation to an idle state
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
private _onQueueEmpty;
|
||||||
|
private _onIdleComplete;
|
||||||
|
/***
|
||||||
|
* Is the current animation is Idle?
|
||||||
|
* @return {Boolean}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
private _isIdleAnimation;
|
||||||
|
/**
|
||||||
|
* Gets a random Idle animation
|
||||||
|
* @return {String}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
private _getIdleAnimation;
|
||||||
|
/**************************** Events ************************************/
|
||||||
|
private _setupEvents;
|
||||||
|
private _onDoubleClick;
|
||||||
|
reposition(): void;
|
||||||
|
private _onMouseDown;
|
||||||
|
/**************************** Drag ************************************/
|
||||||
|
private _startDrag;
|
||||||
|
private _calculateClickOffset;
|
||||||
|
private _updateLocation;
|
||||||
|
private _dragMove;
|
||||||
|
private _finishDrag;
|
||||||
|
private _addToQueue;
|
||||||
|
/**************************** Pause and Resume ************************************/
|
||||||
|
pause(): void;
|
||||||
|
resume(): void;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=agent.d.ts.map
|
1
clippy/dist/agent.d.ts.map
vendored
Normal file
1
clippy/dist/agent.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,OAAO,KAAK;IACtB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,OAAO,CAAuD;IACtE,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAC,CAA4B;IAChD,OAAO,CAAC,SAAS,CAAC,CAA4B;gBAEjC,OAAO,EAAE,YAAY;IAsBlC;;;;OAIG;IACH,SAAS,CAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAS/B;;;;OAIG;IACH,IAAI,CAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI;IAoBzC,MAAM,CAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAsD9C,OAAO,CAAC,aAAa;IAYrB,IAAI,CAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ;IAgCrD;;;OAGG;IACH,IAAI,CAAE,IAAI,GAAE,OAAc;IA0B1B;;;OAGG;IACH,KAAK,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAe;IAO1C;;OAEG;IACH,YAAY;IAIZ,KAAK,CAAE,IAAI,EAAE,MAAM;IASnB;;OAEG;IACH,WAAW;IAMX,IAAI;IAOJ;;;;OAIG;IACH,YAAY,CAAE,IAAI,EAAE,MAAM;IAI1B;;;;OAIG;IACH,UAAU;IAIV;;;OAGG;IACH,OAAO,IAAK,GAAG;IAUf,yEAAyE;IAEzE;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAwBrB,2FAA2F;IAE3F;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,eAAe;IAMvB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAezB,0EAA0E;IAE1E,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAMtB,UAAU;IA+BV,OAAO,CAAC,YAAY;IAMpB,wEAAwE;IAExE,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,WAAW;IAKnB,oFAAoF;IAEpF,KAAK;IAML,MAAM;CAKT"}
|
2
clippy/dist/agents/Bonzi.js
vendored
Normal file
2
clippy/dist/agents/Bonzi.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
clippy/dist/agents/Bonzi.js.map
vendored
Normal file
1
clippy/dist/agents/Bonzi.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
3
clippy/dist/agents/Bonzi/agent.d.ts
vendored
Normal file
3
clippy/dist/agents/Bonzi/agent.d.ts
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { AgentConfig } from "../../types";
|
||||||
|
export declare const agent: AgentConfig;
|
||||||
|
//# sourceMappingURL=agent.d.ts.map
|
1
clippy/dist/agents/Bonzi/agent.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Bonzi/agent.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/agents/Bonzi/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,eAAO,MAAM,KAAK,EAAE,WAyxBnB,CAAA"}
|
4
clippy/dist/agents/Bonzi/index.d.ts
vendored
Normal file
4
clippy/dist/agents/Bonzi/index.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import { AgentWrapper } from '../../types';
|
||||||
|
declare const Bonzi: AgentWrapper;
|
||||||
|
export default Bonzi;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
1
clippy/dist/agents/Bonzi/index.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Bonzi/index.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/Bonzi/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,QAAA,MAAM,KAAK,EAAE,YAMZ,CAAA;AAED,eAAe,KAAK,CAAC"}
|
4
clippy/dist/agents/Bonzi/sounds-mp3.d.ts
vendored
Normal file
4
clippy/dist/agents/Bonzi/sounds-mp3.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export declare const soundMp3: {
|
||||||
|
"1": string;
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=sounds-mp3.d.ts.map
|
1
clippy/dist/agents/Bonzi/sounds-mp3.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Bonzi/sounds-mp3.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"sounds-mp3.d.ts","sourceRoot":"","sources":["../../../src/agents/Bonzi/sounds-mp3.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;CAA8huC,CAAA"}
|
10
clippy/dist/agents/Bonzi/sounds-ogg.d.ts
vendored
Normal file
10
clippy/dist/agents/Bonzi/sounds-ogg.d.ts
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
export declare const soundOgg: {
|
||||||
|
'1': string;
|
||||||
|
'2': string;
|
||||||
|
'3': string;
|
||||||
|
'4': string;
|
||||||
|
'5': string;
|
||||||
|
'6': string;
|
||||||
|
'7': string;
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=sounds-ogg.d.ts.map
|
1
clippy/dist/agents/Bonzi/sounds-ogg.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Bonzi/sounds-ogg.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"sounds-ogg.d.ts","sourceRoot":"","sources":["../../../src/agents/Bonzi/sounds-ogg.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;CAA2j0E,CAAA"}
|
2
clippy/dist/agents/Clippy.js
vendored
Normal file
2
clippy/dist/agents/Clippy.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
clippy/dist/agents/Clippy.js.map
vendored
Normal file
1
clippy/dist/agents/Clippy.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
3
clippy/dist/agents/Clippy/agent.d.ts
vendored
Normal file
3
clippy/dist/agents/Clippy/agent.d.ts
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { AgentConfig } from "../../types";
|
||||||
|
export declare const agent: AgentConfig;
|
||||||
|
//# sourceMappingURL=agent.d.ts.map
|
1
clippy/dist/agents/Clippy/agent.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Clippy/agent.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/agents/Clippy/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,eAAO,MAAM,KAAK,EAAE,WAo9CnB,CAAA"}
|
4
clippy/dist/agents/Clippy/index.d.ts
vendored
Normal file
4
clippy/dist/agents/Clippy/index.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import { AgentWrapper } from '../../types';
|
||||||
|
declare const Clippy: AgentWrapper;
|
||||||
|
export default Clippy;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
1
clippy/dist/agents/Clippy/index.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Clippy/index.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/Clippy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,QAAA,MAAM,MAAM,EAAE,YAMb,CAAA;AAED,eAAe,MAAM,CAAC"}
|
18
clippy/dist/agents/Clippy/sounds-mp3.d.ts
vendored
Normal file
18
clippy/dist/agents/Clippy/sounds-mp3.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
export declare const soundMp3: {
|
||||||
|
'1': string;
|
||||||
|
'2': string;
|
||||||
|
'3': string;
|
||||||
|
'4': string;
|
||||||
|
'5': string;
|
||||||
|
'6': string;
|
||||||
|
'7': string;
|
||||||
|
'8': string;
|
||||||
|
'9': string;
|
||||||
|
'10': string;
|
||||||
|
'11': string;
|
||||||
|
'12': string;
|
||||||
|
'13': string;
|
||||||
|
'14': string;
|
||||||
|
'15': string;
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=sounds-mp3.d.ts.map
|
1
clippy/dist/agents/Clippy/sounds-mp3.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Clippy/sounds-mp3.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"sounds-mp3.d.ts","sourceRoot":"","sources":["../../../src/agents/Clippy/sounds-mp3.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;CAAwmyB,CAAA"}
|
18
clippy/dist/agents/Clippy/sounds-ogg.d.ts
vendored
Normal file
18
clippy/dist/agents/Clippy/sounds-ogg.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
export declare const soundOgg: {
|
||||||
|
'1': string;
|
||||||
|
'2': string;
|
||||||
|
'3': string;
|
||||||
|
'4': string;
|
||||||
|
'5': string;
|
||||||
|
'6': string;
|
||||||
|
'7': string;
|
||||||
|
'8': string;
|
||||||
|
'9': string;
|
||||||
|
'10': string;
|
||||||
|
'11': string;
|
||||||
|
'12': string;
|
||||||
|
'13': string;
|
||||||
|
'14': string;
|
||||||
|
'15': string;
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=sounds-ogg.d.ts.map
|
1
clippy/dist/agents/Clippy/sounds-ogg.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Clippy/sounds-ogg.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"sounds-ogg.d.ts","sourceRoot":"","sources":["../../../src/agents/Clippy/sounds-ogg.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;CAAigoF,CAAA"}
|
2
clippy/dist/agents/F1.js
vendored
Normal file
2
clippy/dist/agents/F1.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
clippy/dist/agents/F1.js.map
vendored
Normal file
1
clippy/dist/agents/F1.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
3
clippy/dist/agents/F1/agent.d.ts
vendored
Normal file
3
clippy/dist/agents/F1/agent.d.ts
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { AgentConfig } from "../../types";
|
||||||
|
export declare const agent: AgentConfig;
|
||||||
|
//# sourceMappingURL=agent.d.ts.map
|
1
clippy/dist/agents/F1/agent.d.ts.map
vendored
Normal file
1
clippy/dist/agents/F1/agent.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/agents/F1/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,eAAO,MAAM,KAAK,EAAE,WA8tDnB,CAAA"}
|
4
clippy/dist/agents/F1/index.d.ts
vendored
Normal file
4
clippy/dist/agents/F1/index.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import { AgentWrapper } from '../../types';
|
||||||
|
declare const F1: AgentWrapper;
|
||||||
|
export default F1;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
1
clippy/dist/agents/F1/index.d.ts.map
vendored
Normal file
1
clippy/dist/agents/F1/index.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/F1/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,QAAA,MAAM,EAAE,EAAE,YAMT,CAAA;AAED,eAAe,EAAE,CAAC"}
|
34
clippy/dist/agents/F1/sounds-mp3.d.ts
vendored
Normal file
34
clippy/dist/agents/F1/sounds-mp3.d.ts
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
export declare const soundMp3: {
|
||||||
|
'1': string;
|
||||||
|
'2': string;
|
||||||
|
'3': string;
|
||||||
|
'4': string;
|
||||||
|
'5': string;
|
||||||
|
'6': string;
|
||||||
|
'7': string;
|
||||||
|
'8': string;
|
||||||
|
'9': string;
|
||||||
|
'10': string;
|
||||||
|
'11': string;
|
||||||
|
'12': string;
|
||||||
|
'13': string;
|
||||||
|
'14': string;
|
||||||
|
'15': string;
|
||||||
|
'16': string;
|
||||||
|
'17': string;
|
||||||
|
'18': string;
|
||||||
|
'19': string;
|
||||||
|
'20': string;
|
||||||
|
'21': string;
|
||||||
|
'22': string;
|
||||||
|
'23': string;
|
||||||
|
'24': string;
|
||||||
|
'25': string;
|
||||||
|
'26': string;
|
||||||
|
'27': string;
|
||||||
|
'28': string;
|
||||||
|
'29': string;
|
||||||
|
'30': string;
|
||||||
|
'31': string;
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=sounds-mp3.d.ts.map
|
1
clippy/dist/agents/F1/sounds-mp3.d.ts.map
vendored
Normal file
1
clippy/dist/agents/F1/sounds-mp3.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"sounds-mp3.d.ts","sourceRoot":"","sources":["../../../src/agents/F1/sounds-mp3.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAw9pG,CAAA"}
|
34
clippy/dist/agents/F1/sounds-ogg.d.ts
vendored
Normal file
34
clippy/dist/agents/F1/sounds-ogg.d.ts
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
export declare const soundOgg: {
|
||||||
|
'1': string;
|
||||||
|
'2': string;
|
||||||
|
'3': string;
|
||||||
|
'4': string;
|
||||||
|
'5': string;
|
||||||
|
'6': string;
|
||||||
|
'7': string;
|
||||||
|
'8': string;
|
||||||
|
'9': string;
|
||||||
|
'10': string;
|
||||||
|
'11': string;
|
||||||
|
'12': string;
|
||||||
|
'13': string;
|
||||||
|
'14': string;
|
||||||
|
'15': string;
|
||||||
|
'16': string;
|
||||||
|
'17': string;
|
||||||
|
'18': string;
|
||||||
|
'19': string;
|
||||||
|
'20': string;
|
||||||
|
'21': string;
|
||||||
|
'22': string;
|
||||||
|
'23': string;
|
||||||
|
'24': string;
|
||||||
|
'25': string;
|
||||||
|
'26': string;
|
||||||
|
'27': string;
|
||||||
|
'28': string;
|
||||||
|
'29': string;
|
||||||
|
'30': string;
|
||||||
|
'31': string;
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=sounds-ogg.d.ts.map
|
1
clippy/dist/agents/F1/sounds-ogg.d.ts.map
vendored
Normal file
1
clippy/dist/agents/F1/sounds-ogg.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"sounds-ogg.d.ts","sourceRoot":"","sources":["../../../src/agents/F1/sounds-ogg.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAqx/P,CAAA"}
|
2
clippy/dist/agents/Genie.js
vendored
Normal file
2
clippy/dist/agents/Genie.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
clippy/dist/agents/Genie.js.map
vendored
Normal file
1
clippy/dist/agents/Genie.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
3
clippy/dist/agents/Genie/agent.d.ts
vendored
Normal file
3
clippy/dist/agents/Genie/agent.d.ts
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { AgentConfig } from "../../types";
|
||||||
|
export declare const agent: AgentConfig;
|
||||||
|
//# sourceMappingURL=agent.d.ts.map
|
1
clippy/dist/agents/Genie/agent.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Genie/agent.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/agents/Genie/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,eAAO,MAAM,KAAK,EAAE,WAA4pkE,CAAA"}
|
4
clippy/dist/agents/Genie/index.d.ts
vendored
Normal file
4
clippy/dist/agents/Genie/index.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import { AgentWrapper } from '../../types';
|
||||||
|
declare const Genie: AgentWrapper;
|
||||||
|
export default Genie;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
1
clippy/dist/agents/Genie/index.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Genie/index.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/Genie/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,QAAA,MAAM,KAAK,EAAE,YAMZ,CAAA;AAED,eAAe,KAAK,CAAC"}
|
17
clippy/dist/agents/Genie/sounds-mp3.d.ts
vendored
Normal file
17
clippy/dist/agents/Genie/sounds-mp3.d.ts
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
export declare const soundMp3: {
|
||||||
|
'1': string;
|
||||||
|
'2': string;
|
||||||
|
'3': string;
|
||||||
|
'4': string;
|
||||||
|
'5': string;
|
||||||
|
'6': string;
|
||||||
|
'7': string;
|
||||||
|
'8': string;
|
||||||
|
'9': string;
|
||||||
|
'10': string;
|
||||||
|
'11': string;
|
||||||
|
'12': string;
|
||||||
|
'13': string;
|
||||||
|
'14': string;
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=sounds-mp3.d.ts.map
|
1
clippy/dist/agents/Genie/sounds-mp3.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Genie/sounds-mp3.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"sounds-mp3.d.ts","sourceRoot":"","sources":["../../../src/agents/Genie/sounds-mp3.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;CAAiw8B,CAAA"}
|
17
clippy/dist/agents/Genie/sounds-ogg.d.ts
vendored
Normal file
17
clippy/dist/agents/Genie/sounds-ogg.d.ts
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
export declare const soundOgg: {
|
||||||
|
'1': string;
|
||||||
|
'2': string;
|
||||||
|
'3': string;
|
||||||
|
'4': string;
|
||||||
|
'5': string;
|
||||||
|
'6': string;
|
||||||
|
'7': string;
|
||||||
|
'8': string;
|
||||||
|
'9': string;
|
||||||
|
'10': string;
|
||||||
|
'11': string;
|
||||||
|
'12': string;
|
||||||
|
'13': string;
|
||||||
|
'14': string;
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=sounds-ogg.d.ts.map
|
1
clippy/dist/agents/Genie/sounds-ogg.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Genie/sounds-ogg.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"sounds-ogg.d.ts","sourceRoot":"","sources":["../../../src/agents/Genie/sounds-ogg.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;CAA+h7F,CAAA"}
|
2
clippy/dist/agents/Genius.js
vendored
Normal file
2
clippy/dist/agents/Genius.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
clippy/dist/agents/Genius.js.map
vendored
Normal file
1
clippy/dist/agents/Genius.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
3
clippy/dist/agents/Genius/agent.d.ts
vendored
Normal file
3
clippy/dist/agents/Genius/agent.d.ts
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import { AgentConfig } from "../../types";
|
||||||
|
export declare const agent: AgentConfig;
|
||||||
|
//# sourceMappingURL=agent.d.ts.map
|
1
clippy/dist/agents/Genius/agent.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Genius/agent.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/agents/Genius/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,eAAO,MAAM,KAAK,EAAE,WAA03hF,CAAA"}
|
4
clippy/dist/agents/Genius/index.d.ts
vendored
Normal file
4
clippy/dist/agents/Genius/index.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import { AgentWrapper } from '../../types';
|
||||||
|
declare const Genius: AgentWrapper;
|
||||||
|
export default Genius;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
1
clippy/dist/agents/Genius/index.d.ts.map
vendored
Normal file
1
clippy/dist/agents/Genius/index.d.ts.map
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/Genius/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,QAAA,MAAM,MAAM,EAAE,YAMb,CAAA;AAED,eAAe,MAAM,CAAC"}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user