Bestemmingen schrijven voor Dropzone

Dropzone is niet zomaar een FTP-uploadclient, maar een geweldig hulpprogramma-platform voor het verwerken van bestanden en tekst. Dropzone is een verzameling bestemmingen die twee soorten acties kan hebben: slepen en neerzetten actie en / of een klik actie. Er zijn veel voorgeprogrammeerde bestemmingen om te gebruiken, maar u kunt ook uw eigen bestemmingen in Ruby schrijven!

Introductie van Dropzone


Dropzone Dropdown Menu

Wanneer u Dropzone start, wordt een nieuw menubalkpictogram boven aan het scherm weergegeven. Wanneer u hierop klikt, worden alle bestemmingen weergegeven die u hebt geconfigureerd. Dit drop-gebied kan zoveel bestemmingen hebben als u wilt configureren. Bestanden of tekst kunnen op deze doelen worden neergezet of u kunt erop klikken om de klikactie uit te voeren.


Dropzone-kringen

Wanneer u de muis uiterst links of rechts verplaatst, afhankelijk van uw configuratie, verschijnen de Dropzone-cirkels. Je kunt maximaal vijf verschillende bestemmingen in de kringen hebben. U kunt bestanden naar deze doelcirkels slepen om de actie op hen uit te voeren, of bestanden naar de vervolgkeuzelijst van de menubalk slepen voor hetzelfde effect. Dropzone geeft een mooie indicatie van de voortgang van de actie.


Dropzone Dropdown Menu: Voorkeuren selecteren

Om uw verschillende bestemmingen te configureren, klikt u gewoon op het menubalkpictogram en selecteert u Voorkeuren ... .


Dropzone-bestemmingen dialoogvenster

Het voorkeuren-dialoogvenster opent naar de lijst met bestemmingen. Hier kunnen nieuwe bestemmingen worden gemaakt en oude bestemmingen kunnen worden bewerkt of verwijderd.

De standaardacties die u kunt gebruiken zijn:

  • Verplaats bestanden
  • Amazon S3
  • Bestanden kopiëren
  • Bestanden kopiëren
  • Bestanden kopiëren
  • Image Shack
  • Applicatie installeren
  • Open de applicatie
  • Sla tekst op
  • Deel tekst
  • TwitPic

U kunt ook vele anderen van hun website downloaden.

Een bestemming is gewoon een enkel bestand van Ruby-code met de extensie gewijzigd in .afgeefpunt in plaats van .rb. Daarom kan iedereen met een beetje kennis van Ruby hun eigen bestemmingen maken en deze delen met anderen.


Dialoogvenster Dropzone-instelling

De Instellingen Dialoog stelt u in staat de cirkels in te schakelen, de cirkels aan de linker- of rechterkant van het scherm te kiezen en de acties die u in uw systeem hebt geladen te bewerken. Het bewerken van een actie roept gewoon de standaard teksteditor aan om het doelbestand te bewerken.

Tip: Alle bestemmingsbestanden bevinden zich op ~ / Bibliotheek / Application Support / Dropzone / Bestandscripts /. Alle wijzigingen die u in een bestand daar aanbrengt, worden onmiddellijk gebruikt. Daarom kunt u daar eenvoudig bestanden maken om ze als geldige acties in het dialoogvenster te installeren. Wanneer u dubbelklikt op een Dropzone-bestemming, wordt deze eenvoudig naar deze map gekopieerd.

Comprimeer / Converteer Bestemming van afbeeldingen

Ik werk met foto's voor tutorials en blog posts de hele tijd. Ik moet ze altijd kleiner maken en ze verkleinen tot een meer haalbare maat. Dat kan tijdrovend en saai zijn. Maar automatisering is waar Dropzone voor staat. Een goed voorbeeldbestemming is er een om afbeeldingsbestanden te ontvangen en om te zetten terwijl het origineel in een back-upmap wordt bewaard.

Als Ruby nieuw voor je is en je wilt er meer over leren, bekijk dan eens de cursus Fundamentals of Ruby over Tuts+.

Tip: In de download-zip voor deze les heb ik een Alfred Workflow geplaatst voor het bekijken van de Dropzone-bestemmingscripts directory.

Maak om te beginnen een bestand in de opgeroepen directory van Dropzone-scripts CompressImage.dropzone. Alle Dropzone-doelscripts beginnen met een koptekst. Deze kop geeft Dropzone informatie over interactie met deze bestemming. Plaats in het bestand de volgende tekst:

 #! / usr / bin / ruby ​​# Dropzone-bestemmingsinformatie # Naam: Comprimeer afbeelding # Beschrijving: deze bestemming is voor het comprimeren van de gegeven afbeeldingen. Je moet een imagemagick-bibliotheek (http://www.imagemagick.org/script/index.php) hebben geïnstalleerd. Het is het beste om te installeren vanaf HomeBrew (http://brew.sh/). # Handles: NSFilenamesPboardType # Evenementen: geklikt, gesleept # Creator: Richard Guay  # URL: http://customct.com # IconURL: http://www.customct.com/images/CompressFile.png

De eerste regel is de standaard sha-bang voor een ruby-script. Na de sha-bang, er is een opmerkingenblok met de nodige informatie voor Dropzone om gebruik te maken van de bestemming. Al deze velden moeten in elk doelbestand aanwezig zijn. De verschillende velden zijn:

Naam

Naam gewoon de naam die Dropzone nodig heeft om de gebruiker in de actielijst te tonen. Het is beter om dit hier geen bestemming te noemen, maar een naam te hebben die nauwkeurig beschrijft welke actie wordt uitgevoerd.

Omschrijving

Omschrijving is de tekst die voor de actie wordt weergegeven. Dropzone geeft alleen twee regels weer. De enige hier is te groot om volledig in het dialoogvenster te worden gezien. Maar de gebruiker zal dat zien en kan naar het bestemmingsbestand kijken om het hele ding te zien. Er is momenteel geen betere plek om enkele dingen over de bestemming te documenteren.

handgrepen

handgrepen beschrijft de soorten acties die de bestemming zal uitvoeren. De twee mogelijkheden zijn NSFilenamesPboardType en NSStringPboardType.

De NSFilenamesPboardType vertelt Dropzone dat je alleen de volledige bestandsnamen van het systeem gebruikt. De NSStringPboardType vertelt Dropzone dat je alleen strings neemt. Als u beide een komma opsomt, stuurt Dropzone u beide typen. Binnen de bestemmingscode kunt u de omgevingsvariabele controleren ENV [ 'DRAGGED_TYPE'] om te zien welk type is doorgegeven aan de bestemming. Voor deze bestemming, alleen de NSFilenamesPboardType is nodig omdat alleen aan bestanden wordt gewerkt.

Evenementen

Evenementen vertelt Dropzone welk type evenementen de bestemming aankan. Er zijn slechts twee evenementen: gesleept en geklikt. EEN gesleept gebeurtenis laat de gebruiker toe bestanden en / of tekst op de bestemming te plaatsen. EEN geklikt gebeurtenis laat toe dat de bestemming wordt aangeklikt voor een actie. Deze bestemming gebruikt beide gescheiden door een komma.

Schepper

Schepper vertelt Dropzone wie de auteur van de bestemming is en hun e-mailadres. Dit wordt weergegeven op de Bestemmingsdialoog wanneer de doelactie is toegevoegd aan de lijst met bestemmingen van de gebruiker.

URL

URL geeft Dropzone een URL die moet worden weergegeven voor meer informatie over de bestemming. Daarom kan de auteur een link naar zijn eigen website of een pagina op zijn website plaatsen waarin wordt uitgelegd hoe de bestemming moet worden gebruikt. Dit wordt ook weergegeven in de Bestemmingsdialoog wanneer de doelactie is toegevoegd aan de lijst met bestemmingen van de gebruiker.

IconURL

IconURL geef Dropzone een URL om het pictogram voor deze bestemming weer te geven. Dit pictogram wordt gebruikt voor de cirkel-dropzones en de vervolgkeuzemenu's voor het menu. Dit pictogram moet enigszins beschrijvend zijn voor de actie van de bestemming en moet ergens zijn dat direct beschikbaar is (dat wil zeggen: het zou het beste zijn als het zich niet op uw persoonlijke systeem zou bevinden met een DynDNS erop.) Het is misschien niet meteen beschikbaar. openbare Dropbox-link zou werken, dat wil zeggen, zolang het niet wordt verwijderd!). Hier heb ik het pictogram op mijn website om in Dropzone te downloaden.

Bestemmingsactie Functies

De bestemming moet een functie definiëren voor elke actie die als bruikbaar bij de bestemming wordt vermeld. Deze bestemming gebruikt beide: gesleept actie in de gesleept functie voor het verwerken van bestanden, en geklikt actie in de geklikt functie voor het verkrijgen van voorkeuren voor de bestemming die moet worden gebruikt. Deze bestemming moet de grafische doelbreedte en het extensietype hebben om te gebruiken in het conversieproces.

De gesleept functie is eerst. Voeg het volgende toe aan het doelbestand:

 vereisen 'fileutils' def gesleept # # Bepaalde modus inschakelen. # $ dz.determinate (true) # # Stel de standaardretourreeks in op een fout. # result = "U moet eerst de standaardwaarden instellen!" # # Verkrijg de gegevenswaarden. # dataDir = File.expand_path ("~ / Library / Application Support / Dropzone / Destination Data /") als File.directory?(dataDir) # # de standaardinstellingen krijgt. # $ defaults = IO.readlines ("# dataDir /CompressFiles.txt") $ size = $ standaard [0] .split (":") [1] .strip $ ext = $ defaults [1] .split ( ":") [1] .strip # # Verwerk elk afbeeldingsbestand. # total = $ items.count # # Tell dropzone to start ... # $ dz.begin ("Begin met het comprimeren van # totaal afbeeldingen ...") # # Maak de tijdelijke map voor de originelen. # tmpDir = File.dirname ($ items [0]) + "/ tmp /" if! File.directory?(tmpDir) # # Directory bestaat niet! Creëer het! # FileUtils.mkdir_p (tmpDir) einde # # Index over alle gegeven afbeeldingen. # voor index in 0 ... totaal # # Kopieer het origineel naar de tmp-map. Rsync zou de geprefereerde # -methode zijn, maar het verknoeit de percentagegrafiek in de gebruikersinterface. # # Rsync.do_copy ($ items [index], tmpDir, false) # FileUtils.copy_file ($ items [index], "# tmpDir # File.basename ($ items [index])") # # Maken de nieuwe bestandsnaam met de extensie geleverd door de gebruiker. # $ newFilePath = "# $ items [index] .chomp (Bestandsnaam ($ items [index])) # $ ext" # # Converteer het afbeeldingsbestand. # output = '/ usr / local / bin / convert -background white -kwaliteit 90% -alpha background -alpha off + dither-kleuren 256 -flatten -transparent none -hit # $ size \ "# $ items [index ] \ "\" # $ newFilePath \ "; ' # # Verwijder het origineel als de conversie het origineel niet vernietigt. # if File.extname ($ items [index])! = $ ext File.delete ($ items [index]) end # # Vertel Dropzone welk percentage is voltooid. # $ dz.percent ((((index + 1) * 100) / totaal) .to_i) einde # # Stel de resultatenreeks in op Voltooid. # result = "Voltooid comprimeren." einde # # Vertel de gebruiker dat het klaar is. # $ dz.finish (resultaat) # # Sluit de dropzone protocal af. Als je een url op het klembord wilt, geef dit # hier door. Als u alleen tekst naar het klembord wilt kopiëren, gebruikt u in plaats daarvan $ dz.text (). # $ Dz.url () of $ dz.text () moet het laatste zijn in de gesleepte methode. # $ dz.url (false) einde

Het eerste item declareert alle bibliotheken die nodig zijn voor de bestemming. Hier de fileutils bibliotheek is nodig om bestanden te verplaatsen. De auteur van het programma beveelt het gebruik van de rsync bibliotheek die vooraf is geladen in Dropzone, maar het heeft een neveneffect van het resetten van de voortgangsbalk telkens wanneer deze wordt opgeroepen. De auteur van Dropzone zei dat dat effect selecteerbaar is in de volgende versie van Dropzone.

De rsync bibliotheek zal de gebruiker vragen of een bestand al bestaat waar een wordt verplaatst of dat hogere rechten zijn vereist. De fileutils bibliotheek geeft niet en geeft alleen een foutmelding. Daarom, met behulp van de fileutils bibliotheek vereist meer voorzichtigheid.

De gesleept function first vertelt Dropzone dat deze actie een bepaalde tijd in beslag zal nemen. De $ Dz.determinate (true) functie voert dit uit. Als u uploadt naar internet of iets dergelijks, stelt u dit in vals. Indien ingesteld op vals, de voortgangsmeter geeft alleen een schuifeffect weer in de hele dialoog in plaats van te proberen de voortgang weer te geven.

Vervolgens wordt de resultaatstring ingesteld op een standaardwaarde voor weergave aan de gebruiker. Als de volgende als dan verklaring is vals, dan zal het worden weergegeven.

De datadir is ingesteld op het volledige adres van de gegevensdirectory die moet worden gebruikt voor het opslaan van de standaardwaarden voor de bestemming die moet worden gebruikt. Als die map bestaat, worden de standaardwaarden voor de grafische breedte en de extensie voor de afbeelding gelezen. Anders wordt de gebruiker verteld om de voorkeuren eerst in te stellen.

Tip: De volgende versie van Dropzone heeft een API voor het werken met een gegevensdirectory.

De $ items array is de lijst met bestanden die aan de dropzone worden gegeven in een sleepactie. Dit is een standaard Ruby-array en wordt ingesteld door het Dropzone-programma voordat de bestemmings-scripts worden gebeld.

De $ Dz.begin () functie moet worden opgeroepen om de voortgangsbalk weer te geven met de tekst die aan de functie is doorgegeven. Als deze functie niet wordt aangeroepen, wordt de voortgangsbalk niet weergegeven en weet Dropzone niet in welke staat het zich bevindt.

Vervolgens de tmp map wordt gemaakt in de map die de originele afbeeldingen bevat. De originele afbeelding wordt hier gekopieerd voordat er actie wordt ondernomen om de originele afbeelding te behouden voor het geval de gebruiker het resultaat niet goed vindt.

De voor ... einde blok wordt gebruikt om elk grafisch bestand in de map door te lussen $ items matrix. De daadwerkelijke conversie gebeurt met de converteerfunctie van de ImageMagick-bibliotheek. Omdat dit geen standaardbibliotheek is die is geladen op het Mac OS X-systeem, moet de gebruiker van de bestemming het installeren. De beste oplossing is om Home Brew te installeren en de opdracht te gebruiken zet imagemagick in voor installatie om de bibliotheek te installeren. Dat is gemakkelijk te doen en geeft veel betere resultaten dan het zelf proberen te compileren en installeren!

Na het uitvoeren van de grafische conversie en compressie, moet de voortgangsmeter worden bijgewerkt. Dat is wat $ Dz.percent () doet. U berekent het gehele aantal dat is voltooid. De waarde moet tussen 0 en 100 liggen.

Wanneer de lus is voltooid, de resultaat string is ingesteld op een beschrijvend bericht dat is verzonden naar de gebruiker met $ Dz.finish (). Daarna, de $ Dz.url () of $ Dz.text () functies moeten worden opgeroepen. De $ Dz.url () Kan allebei vals of een juiste URL-reeks die naar de gebruiker moet worden verzonden en in een browser wordt weergegeven. De $ Dz.text () is hetzelfde, behalve dat de gegeven tekst rechtstreeks wordt doorgegeven aan het klembord (of plakbord). Een van deze functies moet worden aangeroepen voordat deze wordt afgesloten of Dropzone weet niet of de bestemming is voltooid.

Vervolgens de geklikt functie is gedefinieerd. U kunt deze code toevoegen aan het script:

 def kliked # # De geklikt handler moet de grootte en extensie krijgen om te gebruiken en # sla het op in het configuratiebestand. Sla data op in de # ~ / Library / Application Support / Dropzone / Destination Data / CompressFiles.txt # # # Stel de standaardretourserie in op de foutconditie. # result = "Sorry, u heeft het bericht geannuleerd." # # Vraag de breedte van de afbeelding aan. # button1, width = '. / CocoaDialog standard-inputbox - title "Bestanden comprimeren: grafische breedte" --e --informative-text "Welke breedte?"' .split ("\ n") # # Kijk of de gebruiker geannuleerd. Ga niet verder als ze annuleren. # if button1! = "2" # # Vraag naar het grafische bestandstype om mee te eindigen. # button2, extnum = '. / CocoaDialog dropdown --title "Bestanden comprimeren: grafische indeling" - tekst "Welk grafisch formaat?" --items ".jpg" ".png" ".gif" --button1 "Ok" --button2 "Cancel" '. split ("\ n") # # Kijk of de gebruiker het heeft geannuleerd. Ga niet verder als ze annuleren. # if button2! = "2" # # Verander het dropdown-nummer in een string. # case extnum.to_i wanneer 0 ext = ".jpg" wanneer 1 ext = ".png" wanneer 2 ext = ".gif" end # # Controleer of de datamap bestaat. # dataDir = File.expand_path ("~ / Library / Application Support / Dropzone / Destination Data /") if! File.directory?(dataDir) # # Directory bestaat niet! Creëer het! # FileUtils.mkdir_p (dataDir) end # # Schrijf het gegevensbestand. Niet toevoegen, maar verwijderen en vers schrijven! # File.open ("# dataDir /CompressFiles.txt", 'w') | bestand | file.write ("Size: # width \ nExt: # ext") # # Vertel de gebruiker door de return-string in te stellen op wat de gebruiker heeft gegeven. # result = "Grootte: # width px, Ext: # ext" end end # # Vertel de gebruiker dat dit is gebeurd. # $ dz.finish (resultaat) # # Sluit de dropzone protocal af. Als je een url op het klembord wilt, geef dit # hier door. Als u alleen tekst naar het klembord wilt kopiëren, gebruikt u in plaats daarvan $ dz.text (). # Ofwel $ dz.url () of $ dz.text () moet het laatste zijn in de geklikte methode. # $ dz.url (false) einde

De geklikt functie gebruikt gewoon het externe programma CocoaDialog om het breedtebewustzijn van de afbeelding te verkrijgen en vervolgens opnieuw om de extensie te gebruiken. CocoaDialog is inbegrepen bij Dropzone, maar je kunt het ook downloaden en gebruiken in je eigen scripts.

Zodra de informatie is verkregen van de gebruiker, wordt de standaardmap gemaakt als deze niet bestaat en de voorkeuren die daar zijn opgeslagen in een gegevensbestand genaamd CompressFiles.txt. De gesleept functie leest dit bestand.

Ten slotte worden de voorkeuren teruggestuurd naar de gebruiker die de $ Dz.finish () functie en roep de dz.url () functie om het proces te beëindigen.

testen

Als u de terminal opent naar de ~ / Bibliotheek / Application Support / Dropzone / Bestandscripts / map, ziet u een opgeroepen submap lib. Ga naar die map en je kunt het doel testen. Door te typen:

ruby runner.rb CompressImage.dropzone aangeklikt

U kunt de klikfunctie van de bestemming testen. Op dezelfde manier kunt u typen:

ruby runner.rb CompressImage.dropzone gesleept 

Hiermee wordt de gesleepte functie uitgevoerd met de het dossier. U moet verschillende keren op de enter-toets drukken om het hele proces te doorlopen. Als je plaatst puts functieaanroepen in de code om variabelenwaarden weer te geven, kunt u deze gebruiken om uw code te debuggen.

U kunt ook de uitvoer van een actieve bestemming bekijken door op te drukken Shift-Command-D in het Dropzone menu dropdown. Dropzone zal dan de Uitvoerconsole die alles weergeeft wat het doelscript levert. Een handige foutopsporingsfunctie.

In de toekomst

Dropzone wordt actief ontwikkeld en andere programmeurs maken bestemmingsbestanden. Je kunt hier alternatieve bestemmingen bekijken of het GitHub-account van Dropzone aanvullen, je doelbestand toevoegen en een pull-aanvraag doen.

Dropzone Dropdown Menu

De auteur, John Winter, vertelde me dat de nieuwe versie over een paar maanden uit zal zijn. Je kunt een voorproefje krijgen van versie 3.0 hierboven! Versie 3.0 zal enkele verbeteringen in de API en uitbreidingen naar de gebruikersinterface hebben.

Conclusie

Ik hoop dat je net zo geniet van deze bestemming als ik. Ik gebruik het elke dag in mijn werk. Je kunt nu de basis gebruiken en met je eigen experimenteren. Als u een nieuwe bestemming maakt, deel deze dan in de onderstaande opmerkingen.