Scrierea destinațiilor pentru Dropzone

Dropzone nu este doar un alt client de încărcare FTP, ci o platformă utilitară mare pentru procesarea fișierelor și a textului. Dropzone este o colecție de destinații care pot avea două tipuri de acțiuni: trageți și plasați acțiunea și / sau a faceți clic pe acțiune. Există o mulțime de destinații pre-programate de folosit, dar puteți, de asemenea, să vă scrieți propriile destinații în Ruby!

Introducerea Dropzone


Dropdown meniu Dropzone

Când lansați Dropzone, plasează o nouă pictogramă din bara de meniu în partea superioară a ecranului. Când faceți clic pe el, acesta expune toate destinațiile pe care le-ați configurat. Această zonă de declanșare poate avea cât mai multe destinații pe care doriți să le configurați. Fișierele sau textul pot fi abandonate pe aceste obiective sau puteți să le faceți clic pe ele pentru a face acțiunea clicurilor.


Cercurile Dropzone

Când deplasați mouse-ul spre extrema stângă sau spre dreapta, în funcție de configurație, apar cercurile Dropzone. Puteți avea cel mult cinci destinații diferite în cercuri. Puteți să glisați fișiere în aceste cercuri de destinație pentru a efectua acțiunea asupra acestora sau să trageți fișiere în meniul derulant cu bare de meniuri pentru același efect. Dropzone oferă un bun indicator al progresului acțiunii.


Dropdown meniu derulant: Selectarea preferințelor

Pentru a configura diferite destinații, faceți clic pe pictograma barei de meniu și selectați Preferințe ... .


Dropzone Destinations Dialog

Dialogul Preferințe se deschide în lista de destinații. Aici pot fi create noi destinații și destinațiile vechi pot fi editate sau șterse.

Acțiunile implicite pe care le puteți utiliza sunt:

  • Mutați fișiere
  • Amazon S3
  • Copiați fișierele
  • Copiați fișierele
  • Copiați fișierele
  • Imagine Shack
  • Instalați aplicația
  • Deschideți aplicația
  • Salvați textul
  • Trimiteți textul
  • TwitPic

De asemenea, puteți descărca multe altele de pe site-ul lor web.

O destinație este pur și simplu un singur fișier de cod Ruby cu extensia schimbată la .dropzone in loc de .rb. Prin urmare, oricine are puțină cunoștință despre Ruby își poate crea propriile destinații și le poate împărtăși altora.


Setarea dialogului Dropzone

Dialogul de setări vă permite să activați cercurile, să alegeți cercurile din partea stângă sau din dreapta a ecranului și să editați acțiunile pe care le-ați încărcat în sistemul dvs. Editarea unei acțiuni solicită pur și simplu editorul de text implicit pentru a edita fișierul destinație.

Bacsis: Toate fișierele de destinație sunt situate la ~ / Bibliotecă / Suport pentru aplicații / Dropzone / Destinație Scripturi /. Orice modificare efectuată într-un fișier este utilizată imediat. Prin urmare, puteți crea fișiere acolo pentru a le instala ca acțiuni valide în dialog. Când faceți dublu clic pe orice destinație Dropzone, este pur și simplu copiată în acest director.

Comprimați / Convertiți destinația imaginii

Lucrez cu imagini pentru tutoriale și postări de blog tot timpul. Întotdeauna trebuie să le fac mai mici și să le scot până la o dimensiune mai fezabilă. Asta poate fi consumator de timp și plictisitor. Dar automatizarea este ceea ce face Dropzone. O bună destinație de exemplu ar fi aceea de a primi fișiere de imagini și de a le converti în timp ce salvați originalul într-un director de rezervă.

Dacă sunteți nou în Ruby și doriți să aflați mai multe despre el, ar trebui să verificați cursul Bazele Ruby pe Tuts+.

Bacsis: În zipul de descărcare pentru această lecție, am pus un Alfred Workflow pentru vizualizarea Scripturi de destinație Dropzone director.

Pentru a începe, creați un fișier din directorul scripturilor Dropzone numit CompressImage.dropzone. Toate scripturile de destinație Dropzone încep cu un antet. Acest antet îi spune lui Dropzone cum să interacționeze cu această destinație. În fișierul creat, plasați următorul text:

 #! / usr / bin / ruby ​​# Dropzone Informații despre destinație # Nume: Comprimare imagine # Descriere: Această destinație este pentru comprimarea imaginilor date. Trebuie să aveți instalată biblioteca imagemagick (http://www.imagemagick.org/script/index.php). Cel mai bine este să instalați din HomeBrew (http://brew.sh/). # Manere: NSFilenamesPboardType # Evenimente: Clicate, Dragate # Creator: Richard Guay  # URL: http://customct.com # IconURL: http://www.customct.com/images/CompressFile.png

Prima linie este standardul SHA-bang pentru un scenariu rubinic. După SHA-bang, există un bloc de comentarii care conține informațiile necesare pentru Dropzone pentru a utiliza destinația. Toate aceste câmpuri trebuie să fie în fiecare fișier destinație. Diferitele domenii sunt:

Nume

Nume pur și simplu este numele pe care doriți Dropzone pentru a afișa utilizatorul în lista de acțiuni. Cel mai bine este să nu numiți aici o destinație, dar să aveți un nume care să descrie cu exactitate acțiunea efectuată.

Descriere

Descriere este textul afișat pentru acțiune. Dropzone afișează numai două rânduri. Cel de aici este prea mare pentru a fi văzut complet în interiorul casetei de dialog. Dar, utilizatorul va vedea acest lucru și se poate uita la fișierul de destinație pentru a vedea totul. În prezent nu există un loc mai bun pentru a documenta câteva lucruri despre destinație.

mânerele

mânerele descrie tipurile de acțiuni pe care le va lua destinația. Cele două posibilități sunt NSFilenamesPboardType și NSStringPboardType.

NSFilenamesPboardType spune Dropzone că iei doar nume de fișiere din sistem. NSStringPboardType îi spune lui Dropzone că luați doar șiruri de caractere. Dacă listați cu o virgulă, atunci Dropzone vă va trimite ambele tipuri. În interiorul codului de destinație, puteți verifica variabila de mediu ENV [ 'DRAGGED_TYPE'] pentru a vedea ce tip a fost transmis către destinație. Pentru această destinație, numai NSFilenamesPboardType este necesară deoarece se lucrează numai la fișiere.

Evenimente

Evenimente spune Dropzone ce tip de evenimente se poate ocupa de destinație. Există doar două evenimente: târât și a dat clic. A târât evenimentul va permite utilizatorului să abandoneze fișierele și / sau textul pe destinație. A a dat clic evenimentul va permite ca destinația să fie făcută clic pentru o acțiune. Această destinație utilizează ambele separate printr-o virgulă.

Creator

Creator spune Dropzone care este autorul destinației și adresa de e-mail. Acesta este afișat pe Dialogul destinație când acțiunea de destinație este adăugată la lista de destinații a utilizatorului.

URL-

URL- dă Dropzone o adresă URL care va fi afișată pentru mai multe informații despre destinație. Prin urmare, autorul poate furniza un link către propriul site web sau o pagină de pe site-ul lor web care explică modul de utilizare a destinației. Acest lucru este, de asemenea, afișat în Dialogul destinație când acțiunea de destinație este adăugată la lista de destinații a utilizatorului.

IconURL

IconURL dați Dropzone o adresă URL pentru a afișa pictograma pentru această destinație. Această pictogramă este utilizată pentru zonele de declinare a cercului și zonele de drop-down din meniu. Această pictogramă ar trebui să fie oarecum descriptivă despre acțiunea destinației și ar trebui să fie undeva disponibilă (adică: ar fi mai bine să nu fie în sistemul dvs. personal, cu un DynDNS care să indice acest lucru. link-ul public Dropbox ar funcționa, adică, atâta timp cât nu este șters!). Aici am pictograma de pe site-ul meu pentru descărcare în Dropzone.

Funcții de acțiune destinație

Destinația trebuie să definească o funcție pentru fiecare acțiune listată ca utilizabilă cu destinația. Această destinație va utiliza atât: târât acțiune în târât funcția de procesare a fișierelor și a dat clic acțiune în a făcut clic pentru a obține preferințele destinației de utilizat. Această destinație trebuie să aibă lățimea țintă grafică și tipul de extensie pentru a fi utilizate în procesul de conversie.

târât este prima. Adăugați următoarele în fișierul de destinație:

 cereți "fileutils" def dragged # # Activați modul determinat. # $ dz.determinate (true) # # Setați șirul de returnare implicit la o eroare. # result = "Mai întâi trebuie să setați setările implicite!" # # Obțineți valorile datelor. # dataDir = File.expand_path ("~ / Library / Application Support / Dropzone / Destination Data /") dacă File.directory?(dataDir) # # obține valorile implicite. # $ defaults = IO.readlines ("# dateDir /CompressFiles.txt") $ size = $ implicit [0] .split (":") [ ":") [1] .strip # # Procesează fiecare fișier imagine. # total = $ items.count # # Spuneți dropzone pentru a începe ... # $ dz.begin ("Începeți să comprimați # total images ...") # # Creați directorul temporar pentru originale. # tmpDir = fișier.dirname ($ items [0]) + "/ tmp /" dacă! File.directory?(tmpDir) # # Directorul nu există! Creaza-l! # FileUtils.mkdir_p (tmpDir) end # # Index peste toate imaginile date. # pentru index în 0 ... total # # Copiați originalul în directorul tmp. Rsync ar fi metoda preferată #, dar va afecta graficul procentual pe interfața cu utilizatorul. # # Rsync.do_copy ($ items [index], tmpDir, false) #FileUtils.copy_file ($ items [index], "# tmpDir # File.basename numele noului fișier cu extensia furnizată de utilizator. # $ newFilePath = "# $ items [index] .chomp (File.extname ($ items [index])) # # $ ext" # # Conversia fișierului imagine. # output = '/ usr / local / bin / convert -background alb -calitate 90% -alpha background -alpha off + dither -color 256 -flatten -transparent none -resize # $ size \ "# $ items [index ] \ "\" # $ newFilePath \ "; # # Dacă conversia nu distruge originalul, scoateți originalul. # if File.extname ($ items [index])! = $ ext File.delete ($ items [index]) sfârșit # # Spuneți Dropzone ce procent se face. # $ dz.percent ((((index + 1) * 100) / total) .to_i) sfârșit # # Setați șirul de rezultate pentru a fi terminat. # result = "Comprimare terminată." sfarsit # # Spune-i utilizatorul ca sa terminat. # $ dz.finish (rezultat) # # Finalizați protocolul zonei de drop-down. Dacă doriți o url în clipboard, treceți-l aici. Dacă doriți doar să copiați textul în clipboard, utilizați în schimb $ dz.text (). # Fie $ dz.url (), fie $ dz.text () trebuie să fie ultimul lucru din metoda trasată. # $ dz.url (false) final

Primul element declară toate bibliotecile care vor fi necesare pentru destinație. Aici fileutils biblioteca este necesară pentru a muta fișierele în jur. Autorul programului recomandă utilizarea funcției Rsync biblioteca care este pre-încărcată în Dropzone, dar are un efect secundar de a reseta bara de progres de fiecare dată când este apelată. Autorul lui Dropzone a spus că efectul respectiv va fi selectabil pe sau în versiunea următoare a Dropzone.

Rsync biblioteca va interoga utilizatorul dacă există deja un fișier în cazul în care unul este mutat sau dacă sunt necesare permisiuni mai mari. fileutils biblioteca nu va da și nu va da o eroare. Prin urmare, folosind fileutils biblioteca necesită mai multă prudență.

târât funcția de mai întâi spune Dropzone că această acțiune va dura o perioadă determinată de timp. $ Dz.determinate (true) funcția face acest lucru. Dacă încărcați pe Internet sau ceva similar, ați setat acest lucru fals. Dacă este setat la fals, contorul de progres va afișa doar un efect de defilare în întregul dialog, în loc să încerce să arate progresul.

În continuare, șirul de rezultate este setat la o valoare implicită pentru afișarea către utilizator. Dacă următoarea daca atunci declarația este fals, atunci acesta va fi afișat.

dataDir este setată la adresa completă a directorului de date care va fi utilizat pentru stocarea valorilor implicite pentru utilizarea destinației. Dacă există directorul, se vor citi valorile implicite pentru lățimea grafică și extensia pentru a da graficul. În caz contrar, utilizatorul trebuie să stabilească mai întâi preferințele.

Bacsis: Următoarea versiune a Dropzone va avea un API pentru a lucra cu un director de date.

articole $ array este lista de fișiere date dropzonei într-o acțiune de tragere. Aceasta este o matrice standard Ruby și este setată de programul Dropzone înainte de a apela scripturile de destinație.

$ Dz.begin () trebuie să fie apelată pentru a afișa bara de progres cu textul transmis funcției. Dacă această funcție nu este apelată, bara de progres nu este afișată și Dropzone nu știe în ce stare se află.

Apoi, tmp directorul este creat în directorul care conține grafica originală. Grafica originală este copiată aici înainte ca orice acțiune să fie luată pe ele pentru a păstra graficul inițial în cazul în care utilizatorul nu îi place rezultatul.

pentru ... sfârșit bloc este folosit pentru a buclă peste fiecare fișier grafic din articole $ matrice. Conversia reală se face cu funcția de conversie a bibliotecii ImageMagick. Deoarece aceasta nu este o bibliotecă standard încărcată în sistemul Mac OS X, utilizatorul destinației trebuie să-l instaleze. Cea mai bună soluție este să instalați Home Brew și să folosiți comanda brew instala imagemagick pentru a instala biblioteca. Acest lucru este ușor de făcut și oferă rezultate mult mai bune decât încercarea de a vă compila și instala singur!

După efectuarea conversiei grafice și a comprimării, contorul de progres trebuie actualizat. Asta este $ Dz.percent () face. Calculați suma întregului care este finalizată. Valoarea trebuie să fie cuprinsă între 0 și 100.

Când buclă este terminată, rezultat string este setat la un mesaj descriptiv care este trimis utilizatorului folosind $ Dz.finish (). După aceea, $ Dz.url () sau $ Dz.text () funcțiile trebuie să fie numite. $ Dz.url () pote fi oricare fals sau un șir de adresă adecvat pentru a fi trimis utilizatorului și afișat într-un browser. $ Dz.text () este aceeași, cu excepția faptului că textul dat este transmis direct în clipboard (sau în carton). Una dintre aceste funcții trebuie apelată înainte de a ieși sau Dropzone nu va ști dacă destinația este terminată.

Apoi, a făcut clic este definită funcția. Puteți adăuga acest cod în script:

 def clicked # # Handler-ul trebuie să primească mărimea și extensia de utilizat și # să o salveze în fișierul de configurare. Salvați datele din # / / Library / Application Support / Dropzone / Destination Data / CompressFiles.txt # # # Setați șirul de revenire implicit la starea de eroare. # result = "Ne pare rău, ați anulat." # # Solicitați lățimea graficului. # "," lățime = ". / CocoaDialog standard-inputbox - titlu" Comprimare fișiere: Lățimea grafică "--e -informativ-text" Ce lățime? anulat. Nu continuați dacă anulați. # if button1! = "2" # # Cereți ca tipul de fișier grafic să se încheie cu. # button2, extnum = '. / CocoaDialog dropdown - titlu "Comprimare fișiere: Format grafic" - text "Ce format grafic?" - "" ".jpg" ".png" ".gif" --button1 "Ok" --button2 "Anulați" "split" ("\ n") # # Vezi dacă utilizatorul a fost anulat. Nu continuați dacă anulați. # if button2! = "2" # # Schimbarea numărului dropdown la un șir. # caz extnum.to_i când 0 ext = ".jpg" când 1 ext = ".png" când 2 ext = ".gif" end # # Asigurați-vă că există directorul de date. # dataDir = File.expand_path ("~ / Bibliotecă / Suport pentru aplicații / Dropzone / Date de destinație /") dacă! File.directory?(dataDir) # # Directorul nu există! Creaza-l! # FileUtils.mkdir_p (dataDir) end # # Scrie fișierul de date. Nu adăugați, ci ștergeți și scrieți proaspete! # File.open ("# dataDir /CompressFiles.txt", "w") | fișier | file.write ("Dimensiune: # width \ nExt: # ext") # # Spuneți utilizatorului setând șirul de returnare la ceea ce a dat utilizatorului. # rezultat = "Dimensiune: # lățime px, Ext: # ext" sfârșit sfârșit # # Spuneți-le utilizatorului că sa terminat. # $ dz.finish (rezultat) # # Finalizați protocolul zonei de drop-down. Dacă doriți o url în clipboard, treceți-l aici. Dacă doriți doar să copiați textul în clipboard, utilizați în schimb $ dz.text (). # Fie $ dz.url (), fie $ dz.text () trebuie să fie ultimul lucru din metoda clicked. # $ dz.url (false) final

a făcut clic funcția utilizează pur și simplu programul extern CocoaDialog pentru a obține ținta de lățime a graficului și apoi din nou pentru extensia de utilizat. CocoaDialog este inclus în Dropzone, dar îl puteți descărca și utiliza și în propriile scenarii.

Odată ce informația este obținută de la utilizator, atunci directorul implicit este creat dacă nu există și preferințele stocate acolo într-un fișier de date numit CompressFiles.txt. târât funcția citește acest fișier.

În cele din urmă, preferințele sunt reluate către utilizatorul folosind $ Dz.finish () funcția și apelarea dz.url () pentru a termina procesul.

Testarea

Dacă deschideți terminalul la ~ / Bibliotecă / Suport pentru aplicații / Dropzone / Destinație Scripturi / director, veți vedea un sub-director numit lib. Mergeți la acel director și puteți testa țintă. Introducând:

ruby runner.rb CompressImage.dropzone a făcut clic

Puteți testa funcția apăsată a destinației. De asemenea, puteți tasta:

rubin runner.rb CompressImage.dropzone tras 

Aceasta va rula funcția trasă cu fişier. Trebuie să apăsați tasta Enter de mai multe ori pentru a trece prin întregul proces. Dacă locuiți puts apeluri în funcție de cod pentru a afișa valorile variabilelor, îl puteți utiliza pentru depanarea codului.

De asemenea, puteți vedea ieșirea unei destinații de alergare apăsând Shift-Command-D din meniul derulant al meniului Dropzone. Dropzone va afișa apoi Consola de ieșire care va afișa orice ieșire de script de destinație. O funcție de depanare la îndemână.

In viitor

Dropzone se dezvoltă activ și alți programatori creează fișiere de destinație. Puteți vedea destinații alternative aici sau în furcă, contul GitHub al Dropzone, adăugați fișierul destinație și dați o cerere de tragere.

Dropdown meniu Dropzone

Autorul, John Winter, mi-a spus că noua versiune va ieși în câteva luni. Puteți obține o previzualizare sneek a versiunii 3.0 de mai sus! Versiunea 3.0 va avea unele îmbunătățiri în API și extinderea la interfața cu utilizatorul.

Concluzie

Sper că vă place această destinație la fel de mult ca mine. Îl folosesc în fiecare zi în slujba mea. Acum puteți lua elementele de bază aici și puteți experimenta cu dvs. Dacă faceți o nouă destinație, vă rugăm să o partajați în comentariile de mai jos.