Piggy 0.4.2.3 → 0.4.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGES.txt CHANGED
@@ -1,3 +1,14 @@
1
+ Changes in 0.4.2-4
2
+ - Bugfix for opening browsers
3
+ - Bugfix utf8 conversion of comments
4
+ - Include comments in javascript slideshow
5
+ - Return immediately when opening browsers
6
+ - Make filelist a single column
7
+ - Provide additional fullscreen window
8
+ - Display JPEG properties, use comment if given
9
+ - Make image size in html export an editable option
10
+ - More markup in image page
11
+
1
12
  Changes in 0.4.2-3
2
13
  - Bugfix: Convert /^~/ to home directory
3
14
  - Usability of modal dialogs (e. g. validate before accept)
data/README.txt CHANGED
@@ -25,3 +25,9 @@ Piggy is not meant as general purpose tool for image manipulations:
25
25
  - Image rotation reduces the quality of the image
26
26
  - Piggy saves images without exif informations.
27
27
  Therefore the save action refuses to overwrite existing images.
28
+
29
+ Zipfile will include original images including all metadata.
30
+ Uncheck this option if this metadata includes personal information
31
+ that you do not want to publish.
32
+ (See http://netzreport.googlepages.com/hidden_data_in_jpeg_files.html
33
+ for more information on this topic.)
Binary file
@@ -14,9 +14,28 @@ class ExifrAdapter
14
14
  @exif && @exif.exif?
15
15
  end
16
16
 
17
+ def comment
18
+ return '' unless @exif
19
+ c = @exif.comment.class == String ? @exif.comment : @exif.comment.to_s
20
+ return c.gsub(/\0/, '')
21
+ end
22
+
17
23
  def to_s
18
- return 'no exif' unless exif?
19
- desc = "Exif:\n\t"
24
+ return 'no exif' unless @exif
25
+ desc = "Properties:\n"
26
+ desc += "\theight: #{@exif.height.to_s}\n"
27
+ desc += "\twidth: #{@exif.width.to_s}\n"
28
+ desc += "\tbits: #{@exif.bits.to_s}\n"
29
+ if @exif.comment.class == String
30
+ desc += "\tcomment: #{@exif.comment}\n"
31
+ elsif @exif.comment.class == Array
32
+ desc += "\tcomments: "
33
+ @exif.comment.each { |c|
34
+ desc += "\t\t#{c}\n"
35
+ }
36
+ end
37
+ return desc unless @exif.exif?
38
+ desc += "Exif:\n\t"
20
39
  h = @exif.exif.to_hash
21
40
  desc += h.keys.collect { |k| "#{k.to_s}: #{h[k].to_s}" }.join("\n\t")
22
41
  return desc
@@ -34,7 +34,7 @@ class NconvertThumbnailPageGenerator < ThumbnailPageGenerator
34
34
  resize = '-resize ' + width.to_s + ' ' + height.to_s
35
35
  rotate = fileInfo.rotate? ? " -rotate #{fileInfo.rotation.to_s} " : ''
36
36
  command = "#{nconvertPath} #{format} #{mode} #{rotate} #{resize} #{sharpen} #{out} #{filesArgString}"
37
- client.runCommand(command, osPath(@inputDir))
37
+ client.runCommand(command, osPath(fileInfo.path))
38
38
  end
39
39
 
40
40
  def conversionTypeFor(type)
@@ -62,8 +62,8 @@ class PiggyOptions
62
62
  end
63
63
  @thumbWidth = 100 if @thumbWidth.nil?
64
64
  @thumbHeight = 100 if @thumbHeight.nil?
65
- @imageWidth = 800 if @imageWidth.nil?
66
- @imageHeight = 600 if @imageHeight.nil?
65
+ @imageWidth = 600 if @imageWidth.nil?
66
+ @imageHeight = 520 if @imageHeight.nil?
67
67
  @generateFramePage = false if @generateFramePage.nil?
68
68
  @useTable = generateFramePage? if @uosPathseTable.nil?
69
69
  @localDestinationPath = WinShell.instance.pictureDirectory if @localDestinationPath.nil?
@@ -83,12 +83,6 @@ class ThumbnailPageGenerator < HtmlGenerator
83
83
  escapeHtml("#{info.nameWithoutExtension}.#{conversionTypeFor(info.extension)}")
84
84
  end
85
85
 
86
- ##
87
- # Set path to directory containing the original image files
88
- def setInputDirectory(inputDir)
89
- @inputDir = inputDir
90
- end
91
-
92
86
  def setFiles(fileInfos)
93
87
  @inputFilenames = fileInfos
94
88
  end
@@ -176,20 +170,42 @@ class ThumbnailPageGenerator < HtmlGenerator
176
170
  stylesheet subStylesheetUrl
177
171
  }
178
172
  body({"class"=>"image_page"}) {
179
- a({"HREF" => escapeHTML(pred) + HtmlExt}){
180
- addHtml(escapeHTML(i == 0 ? 'last' : 'previous'))
181
- }
182
- a({"HREF" => escapeHTML(backlink) }) {
183
- addHtml(escapeHTML('overview'))
184
- }
185
- a({"HREF" => escapeHTML(succ) + HtmlExt}) {
186
- addHtml(escapeHTML(i == maxInd ? 'first' : 'next'))
187
- }
188
- br
189
- img(imageName(currentInfo), escapeHTML(current))
190
- br
191
- addHtml(escapeHTML(comment))
192
- }
173
+ div({'class' => 'content'}){
174
+ div({'class' => 'navigation'}){
175
+ div {
176
+ div {
177
+ p {
178
+ a({"HREF" => escapeHTML(pred) + HtmlExt}){
179
+ addHtml(escapeHTML(i == 0 ? 'last' : 'previous'))
180
+ }
181
+ a({"HREF" => escapeHTML(backlink) }) {
182
+ addHtml(escapeHTML('overview'))
183
+ }
184
+ a({"HREF" => escapeHTML(succ) + HtmlExt}) {
185
+ addHtml(escapeHTML(i == maxInd ? 'first' : 'next'))
186
+ }
187
+ }
188
+ }
189
+ }
190
+ }
191
+ div({'class' => 'image'}){
192
+ div {
193
+ div {
194
+ p {
195
+ img(imageName(currentInfo), escapeHTML(current))
196
+ }
197
+ }
198
+ }
199
+ }
200
+ div({'class' => 'comment'}){
201
+ div {
202
+ div {
203
+ p { addHtml(escapeHTML(comment)) }
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
193
209
  }
194
210
  File.open(File.join(imageOutputPath, current + HtmlExt), 'w') { | fp |
195
211
  fp.print(getPage)
@@ -197,28 +213,26 @@ class ThumbnailPageGenerator < HtmlGenerator
197
213
  }
198
214
  end
199
215
 
200
- def buildSlideshowList(pathToImages = nil)
216
+ def buildSlideshowList
201
217
  File.open(File.join(imageOutputPath, 'images.js'), 'w') { | fp |
202
218
  fp.print("var images = new Array(\n")
203
219
  maxInd = @inputFilenames.size - 1
204
220
  (0..maxInd).each { | i |
205
- current = slideshowImage(@inputFilenames[i], pathToImages)
206
- fp.print("'#{current}'")
221
+ current = slideshowImage(@inputFilenames[i])
222
+ fp.print("#{current}")
207
223
  fp.print(i == maxInd ? "\n" : ",\n")
208
224
  }
209
225
  fp.print(")\n")
210
226
  }
211
227
  unless @inputFilenames.empty?
212
- updateSlideshowTemplate(slideshowImage(@inputFilenames[1], pathToImages))
228
+ updateSlideshowTemplate(slideshowImage(@inputFilenames[1]))
213
229
  end
214
230
  end
215
231
 
216
- def slideshowImage(fileName, pathToImages = nil)
217
- img = imageName(fileName)
218
- if pathToImages
219
- img = 'file:///' + File.join(WinShell.instance.rubyPath(pathToImages), img)
220
- end
221
- return img
232
+ def slideshowImage(fileInfo)
233
+ src = imageName(fileInfo)
234
+ txt = escapeHtml(fileInfo.comment)
235
+ "new slide(\"#{src}\", \"\", \"#{txt}\")"
222
236
  end
223
237
 
224
238
  def updateSlideshowTemplate(imageFile)
@@ -513,19 +527,6 @@ class ThumbnailPageGenerator < HtmlGenerator
513
527
  return true
514
528
  end
515
529
 
516
- # This method will create an adhoc slideshow in the
517
- # imageOutputPath without copying any image
518
- # Just for testing issues
519
- # Works fine if all the images allready have appropriate size
520
- def onTheFlySlideshow
521
- unless File.directory?(File.join(outputPath, subDir))
522
- createSubdir
523
- end
524
- copyTemplates(['slideshow.htm', 'slideshow.js'], imageOutputPath)
525
- buildSlideshowList(@inputDir)
526
- return File.join(imageOutputPath, 'slideshow.htm')
527
- end
528
-
529
530
  protected
530
531
 
531
532
  ##
@@ -4,7 +4,7 @@
4
4
  # Provide release information for Piggy.
5
5
  module PiggyVersion
6
6
  def PiggyVersion.versionString
7
- '0.4.2-3'
7
+ '0.4.2-4'
8
8
  end
9
9
  def PiggyVersion.copyrightString
10
10
  'Copyright (C) 2008 Sascha D�rdelmann'
@@ -14,7 +14,7 @@ class FilteredFileList < Fox::FXFileList
14
14
  attr_writer(:choosable)
15
15
 
16
16
  def initialize(parent)
17
- super(parent, nil, 0, ICONLIST_MINI_ICONS|ICONLIST_AUTOSIZE)
17
+ super(parent, nil, 0, ICONLIST_MINI_ICONS|ICONLIST_AUTOSIZE|ICONLIST_COLUMNS)
18
18
  @imageProcessor = ImageProcessor.new(getApp)
19
19
  @chosenFiles = Set.new
20
20
  @choosable = proc { |file| true }
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/ruby
2
+ ## $Id: html_generation_dialog.rb 190 2008-02-02 18:52:57Z Sascha $
3
+
4
+ require 'piggy-gui/require-fox'
5
+
6
+ # Provide a validation hook for ID_ACCEPT action
7
+ class Fullscreen < Fox::FXMainWindow
8
+ include Fox
9
+ include Responder
10
+
11
+ def initialize(*args)
12
+ super(*args)
13
+ FXMAPFUNC(SEL_KEYPRESS, 0, :onKeyPress)
14
+ end
15
+
16
+ def onKeyPress(sender, sel, event)
17
+ if event.code == KEY_Escape
18
+ if FOXVERSION_GE_1_2
19
+ close(true)
20
+ else
21
+ hide()
22
+ end
23
+ return 1
24
+ end
25
+ return 0
26
+ end
27
+ end
@@ -51,6 +51,11 @@ class HtmlGenerationDialog < ModalDialog
51
51
  nil, 0, COMBOBOX_INSERT_LAST)
52
52
  @styleTextField.setFrameStyle(FRAME_SUNKEN|FRAME_THICK)
53
53
  @styleTextField.setLayoutHints(LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_COLUMN)
54
+ @labels.push(FXLabel.new(@contents, "Image size:"))
55
+ sizeFrame = FXHorizontalFrame.new(@contents, FRAME_NONE, 0, 0, 0 , 0, 0, 0, 0, 0)
56
+ @imageWidthField = FXTextField.new(sizeFrame, 4)
57
+ FXLabel.new(sizeFrame, " x ")
58
+ @imageHeightField = FXTextField.new(sizeFrame, 4)
54
59
  addOkCancelButtonsTo(@frame)
55
60
  end
56
61
 
@@ -73,6 +78,8 @@ class HtmlGenerationDialog < ModalDialog
73
78
  @genFrameNo.setCheck(!@options.generateFramePage)
74
79
  @addZipCheck.setCheck(@options.addZip?)
75
80
  @addSlideshowCheck.setCheck(@options.addSlideshow?)
81
+ @imageWidthField.setText(ruby2Fox(@options.imageWidth.to_s))
82
+ @imageHeightField.setText(ruby2Fox(@options.imageHeight.to_s))
76
83
  updateStylesList
77
84
  end
78
85
 
@@ -95,6 +102,20 @@ class HtmlGenerationDialog < ModalDialog
95
102
  @options.style = ptr
96
103
  validateStyle
97
104
  }
105
+ @imageWidthField.connect(SEL_COMMAND) { |sender, sel, ptr|
106
+ begin
107
+ @options.imageWidth = fox2Ruby(@imageWidthField.getText).to_i
108
+ rescue StandardError => ex
109
+ @imageWidthField.setText(ruby2Fox(@options.imageWidth.to_s))
110
+ end
111
+ }
112
+ @imageHeightField.connect(SEL_COMMAND) { |sender, sel, ptr|
113
+ begin
114
+ @options.imageHeight = fox2Ruby(@imageHeightField.getText).to_i
115
+ rescue StandardError => ex
116
+ @imageHeightField.setText(ruby2Fox(@options.imageHeight.to_s))
117
+ end
118
+ }
98
119
  end
99
120
 
100
121
  def getSubdir
@@ -21,6 +21,7 @@ require 'piggy-gui/options_dialog'
21
21
  require 'piggy-gui/ftp_browser_widget'
22
22
  require 'piggy-gui/progress_with_dialog'
23
23
  require 'piggy-gui/filtered_file_list'
24
+ require 'piggy-gui/fullscreen'
24
25
 
25
26
  if RMAGICK_AVAILIABLE
26
27
  require 'piggy-core/rmagick_thumbnail_page_generator'
@@ -58,6 +59,8 @@ class PiggyImageBrowser < Fox::FXMainWindow
58
59
 
59
60
  def initVars
60
61
  @slideManager = nil
62
+ @fullscreen = nil
63
+ @fullscreenView = nil
61
64
  @shell = WinShell.instance
62
65
  @history = Array.new
63
66
  @historyPos = @history.size
@@ -100,6 +103,7 @@ class PiggyImageBrowser < Fox::FXMainWindow
100
103
  @previousImageIcon = getIcon("previous-image.ico")
101
104
  @slideshowImageIcon = getIcon("slides.ico")
102
105
  @slideshowOffImageIcon = getIcon("stop-slides.ico")
106
+ @fullscreenIcon = getIcon("fullscreen.ico")
103
107
  end
104
108
 
105
109
  def initStatusbar
@@ -234,6 +238,8 @@ class PiggyImageBrowser < Fox::FXMainWindow
234
238
  @delayField.connect(SEL_COMMAND) { |sender, sel, ptr|
235
239
  @options.slideshowDelay = @delayField.getText.to_i
236
240
  }
241
+ newToolbarButton(@fullscreenIcon, "&Full\tOpen fullscreen",
242
+ method(:onCmdFullscreen))
237
243
 
238
244
  newToolbarButton(@rotateIcon, "&Rotate\tRotate 90� right",
239
245
  method(:onRotate90))
@@ -351,7 +357,7 @@ class PiggyImageBrowser < Fox::FXMainWindow
351
357
  def loadImage(file)
352
358
  @filename = file # needs to be called this early
353
359
  info = currentFileInfo
354
- @imageComment.setText(info.comment)
360
+ @imageComment.setText(ruby2Fox(info.comment))
355
361
  setCurrentRotation(info.rotation)
356
362
  reloadImage(file)
357
363
  end
@@ -367,9 +373,15 @@ class PiggyImageBrowser < Fox::FXMainWindow
367
373
  image.create
368
374
  @imageview.image = image
369
375
  else
370
- old = @imageview.image
371
- @imageview.loadImage(file, false, @currentRotation)
372
- @imageProcessor.garbageImage(old) unless old.nil?
376
+ if fullscreen? && @fullScreenView
377
+ old = @fullScreenView.image
378
+ @fullScreenView.loadImage(@filename, false, @currentRotation)
379
+ @imageProcessor.garbageImage(old) unless old.nil?
380
+ else
381
+ old = @imageview.image
382
+ @imageview.loadImage(file, false, @currentRotation)
383
+ @imageProcessor.garbageImage(old) unless old.nil?
384
+ end
373
385
  end
374
386
  @imageProcessor.garbageImage(old) unless old.nil?
375
387
  end
@@ -393,7 +405,7 @@ class PiggyImageBrowser < Fox::FXMainWindow
393
405
  end
394
406
  if(supports(filename))
395
407
  loadImage(rubyFile)
396
- @exifView.setText("#{File.basename(rubyFile)}\n#{@exif.to_s}")
408
+ @exifView.setText(ruby2Fox("#{File.basename(rubyFile)}\n#{@exif.to_s}"))
397
409
  @filelist.assumeSelected(rubyFile)
398
410
  return 1
399
411
  end
@@ -465,6 +477,7 @@ class PiggyImageBrowser < Fox::FXMainWindow
465
477
  info = @fileInfos[info]
466
478
  else
467
479
  info.rotation = @exif.viewDegrees
480
+ info.comment = @exif.comment
468
481
  @fileInfos[info] = info
469
482
  end
470
483
  return info
@@ -545,9 +558,12 @@ class PiggyImageBrowser < Fox::FXMainWindow
545
558
  if(@options.browser?)
546
559
  getApp.beginWaitCursor
547
560
  begin
548
- @pipeLog.runCommand(@options.browser + ' ' + generator.mainIndexWithPath,
549
- generator.mainIndexPath)
550
- rescue
561
+ cmd = @options.browser
562
+ args = @shell.osPath(generator.mainIndexWithPath)
563
+ path = generator.mainIndexPath
564
+ @pipeLog.runCommand(cmd + ' ' + args, path, true)
565
+ rescue StandardError => ex
566
+ log(ex.to_s)
551
567
  end
552
568
  getApp.endWaitCursor
553
569
  end
@@ -641,8 +657,33 @@ class PiggyImageBrowser < Fox::FXMainWindow
641
657
 
642
658
  def stopSlideshow
643
659
  @slideManager = nil
660
+ stopFullscreen
644
661
  end
645
-
662
+
663
+ def startFullscreen
664
+ fillMode = LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_CENTER_X|LAYOUT_CENTER_Y
665
+ @fullscreen = Fullscreen.new(getApp, "Piggy fullscreen", nil, nil,
666
+ DECOR_BORDER|DECOR_TITLE|DECOR_CLOSE)
667
+ @fullScreenView = MultiImageCanvas.new(@fullscreen, fillMode)
668
+ @fullscreen.connect(SEL_CLOSE){ |sender, sel, ptr|
669
+ stopFullscreen
670
+ }
671
+ @fullscreen.create
672
+ @fullscreen.show(PLACEMENT_MAXIMIZED)
673
+ reloadImage(@filename)
674
+ end
675
+
676
+ def stopFullscreen
677
+ @fullscreen.destroy if fullscreen?
678
+ @fullscreen = nil
679
+ @fullScreenView = nil
680
+ reloadImage(@filename)
681
+ end
682
+
683
+ def fullscreen?
684
+ @fullscreen && @fullscreen.shown?
685
+ end
686
+
646
687
  def selectIndex(index)
647
688
  return 0 if index < 0
648
689
  if @filelist.isItemDirectory(index)
@@ -688,6 +729,14 @@ class PiggyImageBrowser < Fox::FXMainWindow
688
729
  end
689
730
  end
690
731
 
732
+ def onCmdFullscreen(sender, sel, index)
733
+ if fullscreen?
734
+ stopFullscreen
735
+ else
736
+ startFullscreen
737
+ end
738
+ end
739
+
691
740
  def onCmdGenerateHtml(sender, sel, index)
692
741
  unless @filelist.anyFilesChosen?
693
742
  return error("Select some image files first!")
@@ -703,7 +752,6 @@ class PiggyImageBrowser < Fox::FXMainWindow
703
752
  generator = generatorClass.new(@options)
704
753
  generator.client = @pipeLog
705
754
  generator.setOutputDirectory(outputDir)
706
- generator.setInputDirectory(directory)
707
755
  generator.setTitle(title)
708
756
  generator.setFiles(chosenSequence.collect { |f| infoForFile(f) })
709
757
  getApp.beginWaitCursor
@@ -732,7 +780,7 @@ class PiggyImageBrowser < Fox::FXMainWindow
732
780
  end
733
781
 
734
782
  def onCommentMightHaveChanged(sender, sel, ptr)
735
- currentFileInfo.comment = @imageComment.getText
783
+ currentFileInfo.comment = fox2Ruby(@imageComment.getText)
736
784
  end
737
785
 
738
786
  # EXIT
@@ -9,8 +9,7 @@ require 'piggy-gui/require-fox'
9
9
  class PipeLog < Fox::FXText
10
10
  include Fox
11
11
  include Responder
12
- # TODO: FXRuby problem with displaying pipe output
13
- UsePipes = false
12
+ UsePipes = true
14
13
 
15
14
  def initialize(parent)
16
15
  super(parent)
@@ -18,12 +17,12 @@ class PipeLog < Fox::FXText
18
17
  @pipes = Array.new
19
18
  end
20
19
 
21
- def runCommand(commandline, workingDir)
20
+ def runCommand(commandline, workingDir, spawn = false)
22
21
  inPath(workingDir) {
23
- runCommandAndDisplayOutput(commandline)
22
+ runCommandAndDisplayOutput(commandline, spawn)
24
23
  }
25
24
  end
26
-
25
+
27
26
  def hasOpenPipes?
28
27
  !@pipes.empty?
29
28
  end
@@ -42,16 +41,17 @@ class PipeLog < Fox::FXText
42
41
  @pipes.delete(aPipe)
43
42
  end
44
43
 
45
- def runCommandAndDisplayOutput(commandline)
46
- unless UsePipes
44
+ def runCommandAndDisplayOutput(commandline, spawn)
45
+ unless spawn && UsePipes
47
46
  system(commandline)
48
47
  msg = "#{$? != 0 ? 'Error' : 'Success'}: #{commandline}\n"
49
48
  appendText(msg)
50
49
  return
51
50
  end
52
51
  newPipe = IO.popen("#{commandline} 2>&1")
52
+ return if(spawn)
53
53
  getApp().addInput(newPipe, @inputTypes) { |sender, sel, ptr|
54
- case SELTYPE(sel)
54
+ case FXSELTYPE(sel)
55
55
  when SEL_IO_READ
56
56
  text = newPipe.read
57
57
  if text
@@ -30,9 +30,7 @@ SLIDES.repeat = true;
30
30
 
31
31
  for(var i in images)
32
32
  {
33
- s = new slide();
34
- s.src = images[i];
35
- s.text = unescape("");
33
+ s = images[i];
36
34
  s.link = "index.htm";
37
35
  s.target = "";
38
36
  s.attr = "";
@@ -0,0 +1,95 @@
1
+ body {
2
+ font-family: Helvetica, Arial, sans-serif;
3
+ }
4
+
5
+ body.thumbs {
6
+ text-align: center;
7
+ }
8
+
9
+ div {
10
+ margin:0;
11
+ padding:0;
12
+ }
13
+
14
+ dl {
15
+ margin-left: auto;
16
+ margin-right: auto;
17
+ max-width:600px;
18
+ }
19
+
20
+ /* no max-width in IE < 7 */
21
+ * html dl {
22
+ width: 600px;
23
+ }
24
+
25
+ dd {
26
+ margin:0;
27
+ padding: 0;
28
+ width: 120px;
29
+ height: 125px;
30
+ float: left;
31
+ vertical-align: top;
32
+ text-align: center;
33
+ }
34
+
35
+ .preview {
36
+ float:left;
37
+ }
38
+
39
+ * html .image_page div {
40
+ float: left;
41
+ }
42
+
43
+ .image_page .navigation div div {
44
+ float: left;
45
+ width: 100%;
46
+ border-bottom: solid 1px Silver;
47
+ padding-bottom: 4px;
48
+ margin-bottom: 8px;
49
+ }
50
+
51
+ .image_page .navigation a {
52
+ display: block;
53
+ float: left;
54
+ width: 60px;
55
+ margin: 10px;
56
+ text-decoration: none;
57
+ color: Silver;
58
+ font-weight: bold;
59
+ }
60
+
61
+ .image_page .image {
62
+ clear: both;
63
+ float: left;
64
+ }
65
+
66
+ .image_page .comment p {
67
+ padding: 8px;
68
+ }
69
+
70
+ .thumb, .image_page .image div {
71
+ background-image:url("shadow.jpg");
72
+ background-position:right bottom;
73
+ background-repeat:no-repeat;
74
+ }
75
+
76
+ .thumb p, .image_page .image div div {
77
+ margin:0;
78
+ padding:0;
79
+ background-image:url("shadow-rt.jpg");
80
+ background-position:right -80px;
81
+ background-repeat:no-repeat;
82
+ }
83
+
84
+ .thumb p a, .image_page .image div div p {
85
+ display: block;
86
+ padding-right:20px;
87
+ padding-bottom:20px;
88
+ background-image:url("shadow-lb.jpg");
89
+ background-position:-80px bottom;
90
+ background-repeat:no-repeat;
91
+ }
92
+
93
+ .thumb p a img {
94
+ border:none;
95
+ }
metadata CHANGED
@@ -1,36 +1,49 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
3
- specification_version: 1
4
2
  name: Piggy
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.4.2.3
7
- date: 2008-06-18 00:00:00 +02:00
8
- summary: (P)ick (i)mages and (g)enerate (g)alleries
9
- require_paths:
10
- - lib
11
- email: wsdngatrubyforge at hinterkattentuffel.de
12
- homepage: http://piggy.rubyforge.org
13
- rubyforge_project:
14
- description:
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.4.2.4
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - "Sascha D\xF6rdelmann"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-07-08 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rubyzip
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: exifr
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description:
36
+ email: wsdngatrubyforge at hinterkattentuffel.de
37
+ executables:
38
+ - directory_diff
39
+ - ftp_browser
40
+ - piggy
41
+ extensions: []
42
+
43
+ extra_rdoc_files: []
44
+
31
45
  files:
32
46
  - LICENCE.txt
33
- - README.txt
34
47
  - test.rb
35
48
  - UNINSTALL.txt
36
49
  - lib
@@ -69,15 +82,14 @@ files:
69
82
  - lib/icons/unchecked.ico
70
83
  - lib/icons/upload-selected.ico
71
84
  - lib/icons/upload.ico
85
+ - lib/icons/fullscreen.ico
72
86
  - lib/piggy-core
73
87
  - lib/piggy-core/alive_check.rb
74
88
  - lib/piggy-core/debug.rb
75
89
  - lib/piggy-core/encoding.rb
76
90
  - lib/piggy-core/environment.rb
77
- - lib/piggy-core/exifr_adapter.rb
78
91
  - lib/piggy-core/file_info.rb
79
92
  - lib/piggy-core/htmlgen.rb
80
- - lib/piggy-core/nconvert_thumbsgen.rb
81
93
  - lib/piggy-core/options_persistence.rb
82
94
  - lib/piggy-core/progress.rb
83
95
  - lib/piggy-core/rmagick_thumbnail_page_generator.rb
@@ -86,29 +98,31 @@ files:
86
98
  - lib/piggy-core/version.rb
87
99
  - lib/piggy-core/ftp_adapter.rb
88
100
  - lib/piggy-core/winshell.rb
89
- - lib/piggy-core/thumbnail_page_generator.rb
101
+ - lib/piggy-core/nconvert_thumbsgen.rb
102
+ - lib/piggy-core/exifr_adapter.rb
90
103
  - lib/piggy-core/options.rb
104
+ - lib/piggy-core/thumbnail_page_generator.rb
91
105
  - lib/piggy-gui
92
- - lib/piggy-gui/filtered_file_list.rb
93
106
  - lib/piggy-gui/fox_thumbsgen.rb
94
107
  - lib/piggy-gui/image_processor.rb
95
108
  - lib/piggy-gui/multiimagecanvas.rb
96
- - lib/piggy-gui/pipe_log.rb
97
109
  - lib/piggy-gui/progress_with_dialog.rb
98
110
  - lib/piggy-gui/require-fox.rb
99
111
  - lib/piggy-gui/directory_diff_widget.rb
100
112
  - lib/piggy-gui/ftp_browser_widget.rb
101
- - lib/piggy-gui/piggy_image_browser.rb
102
113
  - lib/piggy-gui/options_dialog.rb
103
114
  - lib/piggy-gui/modal_dialog.rb
104
115
  - lib/piggy-gui/dir_chooser.rb
116
+ - lib/piggy-gui/filtered_file_list.rb
117
+ - lib/piggy-gui/fullscreen.rb
118
+ - lib/piggy-gui/pipe_log.rb
119
+ - lib/piggy-gui/piggy_image_browser.rb
105
120
  - lib/piggy-gui/html_generation_dialog.rb
106
121
  - lib/piggy.rb
107
122
  - lib/templates
108
123
  - lib/templates/fuss.htm
109
124
  - lib/templates/kopf.htm
110
125
  - lib/templates/navigation.htm
111
- - lib/templates/slideshow.htm
112
126
  - lib/templates/slideshow.js
113
127
  - lib/templates/styles
114
128
  - lib/templates/styles/basic
@@ -133,6 +147,12 @@ files:
133
147
  - lib/templates/styles/shadow_D9F5F3/lu.jpg
134
148
  - lib/templates/styles/shadow_D9F5F3/ru.jpg
135
149
  - lib/templates/styles/shadow_D9F5F3/lo.jpg
150
+ - lib/templates/styles/shadow_bowers
151
+ - lib/templates/styles/shadow_bowers/shadow.jpg
152
+ - lib/templates/styles/shadow_bowers/shadow-rt.jpg
153
+ - lib/templates/styles/shadow_bowers/shadow-lb.jpg
154
+ - lib/templates/styles/shadow_bowers/style.css
155
+ - lib/templates/slideshow.htm
136
156
  - test
137
157
  - test/file_info_test.rb
138
158
  - bin
@@ -141,36 +161,32 @@ files:
141
161
  - bin/piggy
142
162
  - INSTALL.txt
143
163
  - CHANGES.txt
144
- test_files:
145
- - test.rb
164
+ - README.txt
165
+ has_rdoc: true
166
+ homepage: http://piggy.rubyforge.org
167
+ post_install_message:
146
168
  rdoc_options: []
147
169
 
148
- extra_rdoc_files: []
149
-
150
- executables:
151
- - directory_diff
152
- - ftp_browser
153
- - piggy
154
- extensions: []
155
-
170
+ require_paths:
171
+ - lib
172
+ required_ruby_version: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: "0"
177
+ version:
178
+ required_rubygems_version: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: "0"
183
+ version:
156
184
  requirements: []
157
185
 
158
- dependencies:
159
- - !ruby/object:Gem::Dependency
160
- name: rubyzip
161
- version_requirement:
162
- version_requirements: !ruby/object:Gem::Version::Requirement
163
- requirements:
164
- - - ">"
165
- - !ruby/object:Gem::Version
166
- version: 0.0.0
167
- version:
168
- - !ruby/object:Gem::Dependency
169
- name: exifr
170
- version_requirement:
171
- version_requirements: !ruby/object:Gem::Version::Requirement
172
- requirements:
173
- - - ">"
174
- - !ruby/object:Gem::Version
175
- version: 0.0.0
176
- version:
186
+ rubyforge_project:
187
+ rubygems_version: 1.2.0
188
+ signing_key:
189
+ specification_version: 2
190
+ summary: (P)ick (i)mages and (g)enerate (g)alleries
191
+ test_files:
192
+ - test.rb