Piggy 0.4.2.3 → 0.4.2.4

Sign up to get free protection for your applications and to get access to all the features.
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