Destinos de escritura para Dropzone

Dropzone no es solo otro cliente de carga FTP, sino una excelente plataforma de utilidades para procesar archivos y texto. Dropzone es una colección de destinos que pueden tener dos tipos de acciones: acción de arrastrar y soltar y / o un haga clic en la acción. Hay muchos destinos preprogramados para usar, pero también puedes escribir tus propios destinos en Ruby!

Introduciendo Dropzone


Menú desplegable Dropzone

Cuando inicias Dropzone, coloca un nuevo icono de barra de menú en la parte superior de la pantalla. Cuando hace clic en él, expone todos los destinos que ha configurado. Esta área de colocación puede tener tantos destinos como desee configurar. Los archivos o el texto se pueden colocar en estos objetivos o puede hacer clic en ellos para hacer clic en la acción.


Dropzone Circles

Cuando mueva el mouse hacia el extremo izquierdo o hacia la derecha, según su configuración, aparecerán los círculos de Dropzone. Puede tener, como máximo, cinco destinos diferentes en los círculos. Puede arrastrar archivos a estos círculos de destino para realizar la acción en ellos, o arrastrar archivos a la barra de menú desplegable para el mismo efecto. Dropzone da un buen indicador del progreso de la acción.


Menú desplegable de Dropzone: Selección de preferencias

Para configurar sus diferentes destinos, simplemente haga clic en el icono de la barra de menú y seleccione Preferencias ... .


Cuadro de diálogo de destinos de Dropzone

El diálogo de preferencias se abre a la lista de destinos. Aquí, se pueden crear nuevos destinos, y los antiguos destinos se pueden editar o eliminar.

Las acciones predeterminadas que puedes usar son:

  • Mover archivos
  • Amazon S3
  • Copiar archivos
  • Copiar archivos
  • Copiar archivos
  • Choza de imágenes
  • Instalar la aplicación
  • Aplicación abierta
  • Guardar texto
  • Compartir texto
  • TwitPic

También puede descargar muchos otros desde su sitio web también.

Un destino es simplemente un archivo único de código Ruby con la extensión cambiada a .zona de descenso en lugar de .rb. Por lo tanto, cualquier persona con un poco de conocimiento de Ruby puede crear sus propios destinos y compartirlos con otros..


Cuadro de diálogo de configuración de Dropzone

los Cuadro de diálogo de configuración le permite encender los círculos, elegir los círculos que se encuentran en el lado izquierdo o derecho de la pantalla y editar las acciones que ha cargado en su sistema. Editar una acción simplemente llama al editor de texto predeterminado para editar el archivo de destino.

Propina: Todos los archivos de destino se encuentran en ~ / Library / Application Support / Dropzone / Destination Scripts /. Cualquier cambio que realices en un archivo se usa inmediatamente. Por lo tanto, simplemente puede crear archivos allí para instalarlos como acciones válidas en el diálogo. Cuando hace doble clic en cualquier destino de Dropzone, simplemente se copia en este directorio.

Comprimir / Convertir destino de imagen

Trabajo con fotos para tutoriales y publicaciones de blog todo el tiempo. Siempre tengo que hacerlos más pequeños y reducirlos a un tamaño más factible. Eso puede llevar mucho tiempo y ser aburrido. Pero, la automatización es de lo que se trata Dropzone. Un buen ejemplo de destino sería recibir archivos de imágenes y convertirlos mientras se guarda el original en un directorio de respaldo.

Si eres nuevo en Ruby y te gustaría aprender más sobre él, deberías consultar el curso de Fundamentos de Ruby en Tuts+.

Propina: En el archivo zip de descarga para esta lección, puse un flujo de trabajo Alfred para ver el Dropzone Destination Scripts directorio.

Para comenzar, cree un archivo en el directorio de scripts de Dropzone llamado CompressImage.dropzone. Todos los scripts de destino de Dropzone comienzan con un encabezado. Este encabezado le dice a Dropzone cómo interactuar con este destino. En el archivo creado, coloque el siguiente texto:

 #! / usr / bin / ruby ​​# Dropzone Información de destino # Nombre: Comprimir Imagen # Descripción: Este destino es para comprimir las imágenes proporcionadas. Debe tener instalada la biblioteca imagemagick (http://www.imagemagick.org/script/index.php). Es mejor instalar desde HomeBrew (http://brew.sh/). # Manijas: NSFilenamesPboardType # Eventos: Clicked, Dragged # Creador: Richard Guay  # URL: http://customct.com # IconURL: http://www.customct.com/images/CompressFile.png

La primera línea es el estándar. sha-bang para una escritura de rubí. Después de la sha-bang, hay un bloque de comentarios que contiene la información necesaria para que Dropzone haga uso del destino. Todos estos campos deben estar en cada archivo de destino. Los diferentes campos son:

Nombre

Nombre simplemente es el nombre que desea que Dropzone muestre al usuario en la lista de acciones. Aquí es mejor no llamar a este destino un destino, sino tener un nombre que describa con precisión la acción que se realiza..

Descripción

Descripción Es el texto que se muestra para la acción. Dropzone solo muestra dos líneas. El que está aquí es demasiado grande para ser visto completamente dentro del cuadro de diálogo. Pero, el usuario verá eso y puede mirar el archivo de destino para verlo todo. Actualmente no hay mejor lugar para documentar algunas cosas sobre el destino..

Asas

Asas Describe los tipos de acciones que realizará el destino. Las dos posibilidades son NSFilenamesPboardType y NSStringPboardType.

los NSFilenamesPboardType le dice a Dropzone que solo toma nombres de archivos completos del sistema. los NSStringPboardType le dice a Dropzone que solo tomas cuerdas. Si enumera ambos con una coma, Dropzone le enviará ambos tipos. Dentro del código de destino, puede comprobar la variable de entorno ENV ['DRAGGED_TYPE'] para ver qué tipo se pasó al destino. Para este destino, solo el NSFilenamesPboardType es necesario porque solo se están trabajando los archivos.

Eventos

Eventos le dice a Dropzone qué tipo de eventos puede manejar el destino. Solo hay dos eventos: Arrastrado y Hecho clic. UNA Arrastrado El evento permitirá al usuario colocar archivos y / o texto en el destino. UNA Hecho clic El evento permitirá hacer clic en el destino para una acción. Este destino utiliza ambos separados por una coma..

Creador

Creador le dice a Dropzone quién es el autor del destino y su dirección de correo electrónico. Esto se muestra en el Diálogo de destino cuando la acción de destino se agrega a la lista de destinos del usuario.

URL

URL le da a Dropzone una URL que se mostrará para obtener más información sobre el destino. Por lo tanto, el autor puede proporcionar un enlace a su propio sitio web o una página en su sitio web que explique cómo usar el destino. Esto también se muestra en el Diálogo de destino cuando la acción de destino se agrega a la lista de destinos del usuario.

IconURL

IconURL proporcione a Dropzone una URL para obtener el icono que se mostrará para este destino. Este icono se utiliza para las zonas de colocación de círculo y las zonas de colocación de menú desplegable. Este ícono debe ser un tanto descriptivo de la acción del destino y debería estar en un lugar que esté fácilmente disponible (es decir, sería mejor si no estuviera en su sistema personal con un DynDNS apuntando a él. Es posible que no esté fácilmente disponible. Pero, un El enlace público de Dropbox funcionaría, es decir, siempre y cuando no se elimine. Aquí, tengo el icono en mi sitio web para descargarlo en Dropzone.

Funciones de acción de destino

El destino debe definir una función para cada acción listada como utilizable con el destino. Este destino utilizará tanto: Arrastrado acción en el arrastrado función para procesar archivos, y Hecho clic acción en el hecho clic Función para obtener preferencias para el destino a utilizar. Este destino debe tener el ancho del objetivo gráfico y el tipo de extensión para usar en el proceso de conversión.

los arrastrado La función es la primera. Agregue lo siguiente al archivo de destino:

 requiere 'fileutils' def dragged # # Enciende el modo determinado. # $ dz.determinate (true) # # Establece la cadena de retorno predeterminada en un error. # result = "¡Primero debes establecer los valores predeterminados!" # # Obtener los valores de los datos. # dataDir = File.expand_path ("~ / Library / Application Support / Dropzone / Destination Data /") si File.directory?(dataDir) # # obtiene los valores predeterminados. # $ defaults = IO.readlines ("# dataDir /CompressFiles.txt") $ size = $ defaults [0] .split (":") [strip] .strip $ ext = $ defaults [1] .split ( ":") [1] .strip # # Procesa cada archivo de imagen. # total = $ items.count # # Indique a dropzone que comience ... # $ dz.begin ("Comience a comprimir # total imágenes ...") # # Cree el directorio temporal para los originales. # tmpDir = File.dirname ($ items [0]) + "/ tmp /" si! File.directory?(tmpDir) # # ¡El directorio no existe! ¡Crealo! # FileUtils.mkdir_p (tmpDir) end # # Index sobre todas las imágenes dadas. # para el índice en 0 ... total # # Copie el original en el directorio tmp. Rsync sería el método # preferido, pero desordena el gráfico de porcentaje en la interfaz de usuario. # # Rsync.do_copy ($ items [index], tmpDir, false) # FileUtils.copy_file ($ items [index], "# tmpDir # File.basename ($ items [index])") # # Create El nuevo nombre del archivo con la extensión proporcionada por el usuario. # $ newFilePath = "# $ items [index] .chomp (File.extname ($ items [index])) # $ ext" # # Convertir el archivo de imagen. # output = '/ usr / local / bin / convert-background white -quality 90% -alpha background -alpha off + dither -colors 256 -flatten -transparent none -resize # $ size \ "# $ items [índice ] \ "\" # $ newFilePath \ "; ' # # Si la conversión no destruye el original, retire el original. # if File.extname ($ items [index])! = $ ext File.delete ($ items [index]) end # # Indica a Dropzone qué porcentaje se realizó. # $ dz.percent (((((index + 1) * 100) / total) .to_i) end # # Establece la cadena de resultados como finalizada. # result = "Compresión terminada". end # # Dile al usuario que está hecho. # $ dz.finish (resultado) # # Termina el protocal de la zona de caída. Si quieres una url en el portapapeles, pásala # aquí. Si solo desea copiar texto al portapapeles, use $ dz.text () en su lugar. # Ya sea $ dz.url () o $ dz.text () tiene que ser lo último en el método arrastrado. # $ dz.url (falso) final

El primer elemento declara las bibliotecas que serán necesarias para el destino. Aquí el fileutils Se necesita una biblioteca para mover archivos. El autor del programa recomienda usar el Rsync La biblioteca está precargada en Dropzone, pero tiene el efecto secundario de restablecer la barra de progreso cada vez que se llama. El autor de Dropzone dijo que ese efecto se podrá seleccionar en la próxima versión de Dropzone..

los Rsync la biblioteca consultará al usuario si ya existe un archivo al que se está moviendo uno o si se requieren permisos más altos. los fileutils La biblioteca no lo hará y solo dará un error. Por lo tanto, utilizando el fileutils la biblioteca requiere más precaución.

los arrastrado La función primero le dice a Dropzone que esta acción tomará una cantidad determinada de tiempo. los $ dz.determinate (true) La función realiza esto. Si está subiendo a Internet o algo similar, debería establecer esto en falso. Si se establece en falso, el medidor de progreso solo mostrará un efecto de desplazamiento en todo el diálogo en lugar de intentar mostrar el progreso.

A continuación, la cadena de resultados se establece en un valor predeterminado para mostrar al usuario. Si el proximo si ... entonces declaración es falso, entonces se mostrará.

los dataDir se establece en la dirección completa del directorio de datos que se utilizará para almacenar los valores predeterminados para que los utilice el destino. Si ese directorio existe, se leen los valores predeterminados para el ancho del gráfico y la extensión para dar el gráfico. De lo contrario, se le dice al usuario que establezca primero las preferencias..

Propina: La próxima versión de Dropzone tendrá una API para trabajar con un directorio de datos.

los $ artículos array es la lista de archivos dados a la zona de arrastre en una acción de arrastre. Esta es una matriz Ruby estándar y la establece el programa Dropzone antes de llamar a los scripts de destino.

los $ dz.begin () se debe llamar a la función para mostrar la barra de progreso con el texto pasado a la función. Si no se llama a esta función, no se muestra la barra de progreso y Dropzone no sabe en qué estado se encuentra.

A continuación, el tmp El directorio se crea en el directorio que contiene los gráficos originales. El gráfico original se copia aquí antes de que se realice una acción para conservar el gráfico original en caso de que al usuario no le guste el resultado..

los para ... fin bloque se utiliza para recorrer cada archivo gráfico en el $ artículos formación. La conversión real se realiza con la función de conversión de la biblioteca ImageMagick. Como esta no es una biblioteca estándar cargada en el sistema Mac OS X, el usuario del destino debe instalarla. La mejor solución es instalar Home Brew y usar el comando. brew install imagemagick para instalar la biblioteca. Es fácil de hacer y ofrece resultados mucho mejores que intentar compilarlo e instalarlo usted mismo.!

Después de realizar la conversión gráfica y la compresión, el medidor de progreso debe actualizarse. Eso es lo que $ dz.percent () hace. Calculas la cantidad entera que se completa. El valor debe estar entre 0 y 100..

Cuando el bucle termina, el resultado La cadena se establece en un mensaje descriptivo que se envía al usuario mediante $ dz.finish (). Después de eso, el $ dz.url () o $ dz.text () Hay que llamar a las funciones. los $ dz.url () pueden ser cualquiera de los dos falso o una cadena de URL adecuada para enviar al usuario y mostrarla en un navegador. los $ dz.text () es el mismo, excepto que el texto dado se pasa directamente al portapapeles (o al tablero de trabajo). Una de estas funciones debe ser llamada antes de salir o Dropzone no sabrá si el destino está terminado.

A continuación, el hecho clic La función está definida. Puedes agregar este código al script:

 def clicked # # El controlador en el que se hizo clic debe obtener el tamaño y la extensión a utilizar y # guardarlo en el archivo de configuración. Guarde los datos en # ~ / Library / Application Support / Dropzone / Destination Data / CompressFiles.txt # # # Establezca la cadena de retorno predeterminada en la condición de error. # result = "Lo siento, cancelaste." # # Solicitar el ancho del gráfico. # button1, width = '. / CocoaDialog standard-inputbox --title "Compress Files: Graphic Width" --e --informative-text "What width?"' .split ("\ n") # # A ver si el usuario cancelado No continúes si se cancelan. # if button1! = "2" # # Pida que el tipo de archivo gráfico termine. # button2, extnum = '. / CocoaDialog dropdown --title "Compress Files: Graphic Format" --text "What Graphic Format?" --items ".jpg" ".png" ".gif" --button1 "Ok" --button2 "Cancel" '. split ("\ n") # # Vea si el usuario canceló. No continúes si se cancelan. # if button2! = "2" # # Cambie el número desplegable a una cadena. # caso extnum.to_i cuando 0 ext = ".jpg" cuando 1 ext = ".png" cuando 2 ext = ".gif" fin # # Asegúrese de que el directorio de datos existe. # dataDir = File.expand_path ("~ / Library / Application Support / Dropzone / Destination Data /") si! File.directory?(dataDir) # # ¡El directorio no existe! ¡Crealo! # FileUtils.mkdir_p (dataDir) end # # Escribe el archivo de datos. ¡No agregue, borre y escriba fresco! # File.open ("# dataDir /CompressFiles.txt", 'w') | file | file.write ("Size: # width \ nExt: # ext") # # Dígale al usuario configurando la cadena de retorno a lo que dio el usuario. # result = "Size: # width px, Ext: # ext" end end # # Dígale al usuario que está listo. # $ dz.finish (resultado) # # Termina el protocal de la zona de caída. Si quieres una url en el portapapeles, pásala # aquí. Si solo desea copiar texto al portapapeles, use $ dz.text () en su lugar. # Ya sea $ dz.url () o $ dz.text () tiene que ser lo último en el método en el que se hizo clic. # $ dz.url (falso) final

los hecho clic función simplemente utiliza el programa externo CocoaDialog para obtener el ancho objetivo del gráfico y luego otra vez para que la extensión use. CocoaDialog se incluye con Dropzone, pero también puede descargarlo y usarlo en sus propios scripts.

Una vez que se obtiene la información del usuario, se crea el directorio predeterminado si no existe y las preferencias se almacenan allí en un archivo de datos llamado CompressFiles.txt. los arrastrado función lee este archivo.

Por último, las preferencias se devuelven al usuario utilizando el $ dz.finish () función y llamando al dz.url () función para terminar el proceso.

Pruebas

Si abres la terminal a la ~ / Library / Application Support / Dropzone / Destination Scripts / directorio, verá un subdirectorio llamado lib. Ve a ese directorio y puedes probar el objetivo. Escribiendo:

ruby runner.rb CompressImage.dropzone pulsado

Puede probar la función pulsada del destino. Del mismo modo, puede escribir:

ruby runner.rb CompressImage.dropzone arrastrado 

Esto ejecutará la función arrastrada con el expediente. Tienes que presionar la tecla enter varias veces para completar todo el proceso. Si colocas pone La función llama al código para mostrar valores variables, puede usarlo para depurar su código.

También puede ver la salida de un destino en ejecución presionando Shift-Command-D en el menú desplegable de Dropzone. Dropzone mostrará entonces la Consola de salida Eso mostrará cualquier cosa que salga el script de destino. Una característica útil de depuración.

En el futuro

Dropzone se está desarrollando activamente y otros programadores están creando archivos de destino. Puede ver destinos alternativos aquí o bifurcar la cuenta de GitHub de Dropzone, agregar su archivo de destino y realizar una solicitud de extracción.

Menú desplegable Dropzone

El autor, John Winter, me dijo que la nueva versión saldrá en unos meses. ¡Puede obtener una vista previa sneek de la versión 3.0 anterior! La versión 3.0 tendrá algunas mejoras en la API y expansiones a la interfaz de usuario.

Conclusión

Espero que disfrutes este destino tanto como yo. Lo estoy usando todos los días en mis trabajos. Ahora puedes tomar lo básico aquí y experimentar con los tuyos. Si realiza un nuevo destino, compártalo en los comentarios a continuación.