powerpoint-pro 2.1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +9 -0
  3. data/.gitignore +19 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +83 -0
  7. data/Rakefile +7 -0
  8. data/lib/powerpoint/compression.rb +25 -0
  9. data/lib/powerpoint/presentation.rb +118 -0
  10. data/lib/powerpoint/slide/collage.rb +47 -0
  11. data/lib/powerpoint/slide/comment.rb +39 -0
  12. data/lib/powerpoint/slide/concept.rb +48 -0
  13. data/lib/powerpoint/slide/custom.rb +50 -0
  14. data/lib/powerpoint/slide/dashboard.rb +45 -0
  15. data/lib/powerpoint/slide/dashboard_user.rb +40 -0
  16. data/lib/powerpoint/slide/extended_intro.rb +38 -0
  17. data/lib/powerpoint/slide/gallery.rb +42 -0
  18. data/lib/powerpoint/slide/intro.rb +36 -0
  19. data/lib/powerpoint/slide/multiple_image.rb +42 -0
  20. data/lib/powerpoint/slide/pictorial.rb +54 -0
  21. data/lib/powerpoint/slide/picture_description.rb +63 -0
  22. data/lib/powerpoint/slide/text_picture_split.rb +56 -0
  23. data/lib/powerpoint/slide/textual.rb +32 -0
  24. data/lib/powerpoint/util.rb +39 -0
  25. data/lib/powerpoint/version.rb +3 -0
  26. data/lib/powerpoint/views/app.xml.erb +51 -0
  27. data/lib/powerpoint/views/collage.xml.erb +211 -0
  28. data/lib/powerpoint/views/collage_rel.xml.erb +9 -0
  29. data/lib/powerpoint/views/comment.xml.erb +257 -0
  30. data/lib/powerpoint/views/comment_rel.xml.erb +6 -0
  31. data/lib/powerpoint/views/concept.xml.erb +271 -0
  32. data/lib/powerpoint/views/concept_rel.xml.erb +9 -0
  33. data/lib/powerpoint/views/content_type.xml.erb +31 -0
  34. data/lib/powerpoint/views/custom.xml.erb +174 -0
  35. data/lib/powerpoint/views/custom_rel.xml.erb +9 -0
  36. data/lib/powerpoint/views/dashboard.xml.erb +976 -0
  37. data/lib/powerpoint/views/dashboard_rel.xml.erb +9 -0
  38. data/lib/powerpoint/views/dashboard_user.xml.erb +221 -0
  39. data/lib/powerpoint/views/dashboard_user_rel.xml.erb +8 -0
  40. data/lib/powerpoint/views/extended_intro_slide.xml.erb +225 -0
  41. data/lib/powerpoint/views/extended_intro_slide_rel.xml.erb +3 -0
  42. data/lib/powerpoint/views/gallery.xml.erb +340 -0
  43. data/lib/powerpoint/views/gallery_rel.xml.erb +9 -0
  44. data/lib/powerpoint/views/intro_slide.xml.erb +74 -0
  45. data/lib/powerpoint/views/multiple_image.xml.erb +319 -0
  46. data/lib/powerpoint/views/multiple_image_rel.xml.erb +9 -0
  47. data/lib/powerpoint/views/pictorial_rel.xml.erb +5 -0
  48. data/lib/powerpoint/views/pictorial_slide.xml.erb +87 -0
  49. data/lib/powerpoint/views/picture_description_rels.xml.erb +5 -0
  50. data/lib/powerpoint/views/picture_description_slide.xml.erb +115 -0
  51. data/lib/powerpoint/views/presentation.xml.erb +124 -0
  52. data/lib/powerpoint/views/presentation.xml.rel.erb +11 -0
  53. data/lib/powerpoint/views/text_picture_split_rel.xml.erb +5 -0
  54. data/lib/powerpoint/views/text_picture_split_slide.xml.erb +114 -0
  55. data/lib/powerpoint/views/textual_rel.xml.erb +4 -0
  56. data/lib/powerpoint/views/textual_slide.xml.erb +78 -0
  57. data/lib/powerpoint.rb +25 -0
  58. data/powerpoint.gemspec +31 -0
  59. data/samples/images/sample_gif.gif +0 -0
  60. data/samples/images/sample_jpg.jpg +0 -0
  61. data/samples/images/sample_png.png +0 -0
  62. data/samples/pptx/sample.pptx +0 -0
  63. data/spec/extended_test_spec.rb +13 -0
  64. data/spec/ranking_spec.rb +13 -0
  65. data/spec/test_spec.rb +22 -0
  66. data/template/_rels/.rels +6 -0
  67. data/template/docProps/core.xml +7 -0
  68. data/template/ppt/_rels/.keep +0 -0
  69. data/template/ppt/media/.keep +0 -0
  70. data/template/ppt/presProps.xml +14 -0
  71. data/template/ppt/slideLayouts/_rels/slideLayout1.xml.rels +2 -0
  72. data/template/ppt/slideLayouts/_rels/slideLayout10.xml.rels +2 -0
  73. data/template/ppt/slideLayouts/_rels/slideLayout11.xml.rels +2 -0
  74. data/template/ppt/slideLayouts/_rels/slideLayout2.xml.rels +2 -0
  75. data/template/ppt/slideLayouts/_rels/slideLayout3.xml.rels +2 -0
  76. data/template/ppt/slideLayouts/_rels/slideLayout4.xml.rels +2 -0
  77. data/template/ppt/slideLayouts/_rels/slideLayout5.xml.rels +2 -0
  78. data/template/ppt/slideLayouts/_rels/slideLayout6.xml.rels +2 -0
  79. data/template/ppt/slideLayouts/_rels/slideLayout7.xml.rels +2 -0
  80. data/template/ppt/slideLayouts/_rels/slideLayout8.xml.rels +2 -0
  81. data/template/ppt/slideLayouts/_rels/slideLayout9.xml.rels +2 -0
  82. data/template/ppt/slideLayouts/slideLayout1.xml +242 -0
  83. data/template/ppt/slideLayouts/slideLayout10.xml +2 -0
  84. data/template/ppt/slideLayouts/slideLayout11.xml +2 -0
  85. data/template/ppt/slideLayouts/slideLayout2.xml +165 -0
  86. data/template/ppt/slideLayouts/slideLayout3.xml +2 -0
  87. data/template/ppt/slideLayouts/slideLayout4.xml +2 -0
  88. data/template/ppt/slideLayouts/slideLayout5.xml +2 -0
  89. data/template/ppt/slideLayouts/slideLayout6.xml +2 -0
  90. data/template/ppt/slideLayouts/slideLayout7.xml +2 -0
  91. data/template/ppt/slideLayouts/slideLayout8.xml +2 -0
  92. data/template/ppt/slideLayouts/slideLayout9.xml +2 -0
  93. data/template/ppt/slideMasters/_rels/slideMaster1.xml.rels +2 -0
  94. data/template/ppt/slideMasters/_rels/slideMaster2.xml.rels +2 -0
  95. data/template/ppt/slideMasters/slideMaster1.xml +487 -0
  96. data/template/ppt/slideMasters/slideMaster2.xml +487 -0
  97. data/template/ppt/slides/_rels/.keep +0 -0
  98. data/template/ppt/tableStyles.xml +2 -0
  99. data/template/ppt/theme/theme1.xml +2 -0
  100. data/template/ppt/theme/theme2.xml +281 -0
  101. data/template/ppt/viewProps.xml +32 -0
  102. metadata +232 -0
@@ -0,0 +1,36 @@
1
+ require 'fileutils'
2
+ require 'erb'
3
+
4
+ module Powerpoint
5
+ module Slide
6
+ class Intro
7
+ include Powerpoint::Util
8
+
9
+ attr_reader :title, :subtitile
10
+
11
+ def initialize(options={})
12
+ require_arguments [:title, :subtitile], options
13
+ options.each {|k, v| instance_variable_set("@#{k}", v)}
14
+ end
15
+
16
+ def save(extract_path, index)
17
+ save_rel_xml(extract_path, index)
18
+ save_slide_xml(extract_path, index)
19
+ end
20
+
21
+ def file_type
22
+ nil
23
+ end
24
+
25
+ def save_rel_xml(extract_path, index)
26
+ render_view('textual_rel.xml.erb', "#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", index: index)
27
+ end
28
+ private :save_rel_xml
29
+
30
+ def save_slide_xml(extract_path, index)
31
+ render_view('intro_slide.xml.erb', "#{extract_path}/ppt/slides/slide#{index}.xml")
32
+ end
33
+ private :save_slide_xml
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,42 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+ require 'fastimage'
4
+ require 'erb'
5
+
6
+ module Powerpoint
7
+ module Slide
8
+ class MultipleImage
9
+ include Powerpoint::Util
10
+
11
+ attr_reader :title, :subtitle, :page_number, :logo, :task_icon, :images
12
+
13
+ def initialize(options={})
14
+ require_arguments [:title, :subtitle, :page_number, :logo, :task_icon, :images], options
15
+ options.each {|k, v| instance_variable_set("@#{k}", v)}
16
+ @images = images
17
+ end
18
+
19
+ def save(extract_path, index)
20
+ @images.each do |image|
21
+ copy_media(extract_path, image[0])
22
+ end
23
+
24
+ copy_media(extract_path, logo)
25
+ copy_media(extract_path, task_icon)
26
+
27
+ save_rel_xml(extract_path, index)
28
+ save_slide_xml(extract_path, index)
29
+ end
30
+
31
+ def save_rel_xml(extract_path, index)
32
+ render_view('multiple_image_rel.xml.erb', "#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", index: index)
33
+ end
34
+ private :save_rel_xml
35
+
36
+ def save_slide_xml(extract_path, index)
37
+ render_view('multiple_image.xml.erb', "#{extract_path}/ppt/slides/slide#{index}.xml")
38
+ end
39
+ private :save_slide_xml
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,54 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+ require 'fastimage'
4
+ require 'erb'
5
+
6
+ module Powerpoint
7
+ module Slide
8
+ class Pictorial
9
+ include Powerpoint::Util
10
+
11
+ attr_reader :image_name, :title, :coords, :image_path
12
+
13
+ def initialize(options={})
14
+ require_arguments [:presentation, :title, :image_path], options
15
+ options.each {|k, v| instance_variable_set("@#{k}", v)}
16
+ @coords = default_coords unless @coords.any?
17
+ @image_name = File.basename(@image_path)
18
+ end
19
+
20
+ def save(extract_path, index)
21
+ copy_media(extract_path, @image_path)
22
+ save_rel_xml(extract_path, index)
23
+ save_slide_xml(extract_path, index)
24
+ end
25
+
26
+ def file_type
27
+ File.extname(image_name).gsub('.', '')
28
+ end
29
+
30
+ def default_coords
31
+ slide_width = pixle_to_pt(720)
32
+ default_width = pixle_to_pt(550)
33
+
34
+ return {} unless dimensions = FastImage.size(image_path)
35
+ image_width, image_height = dimensions.map {|d| pixle_to_pt(d)}
36
+ new_width = default_width < image_width ? default_width : image_width
37
+ ratio = new_width / image_width.to_f
38
+ new_height = (image_height.to_f * ratio).round
39
+ {x: (slide_width / 2) - (new_width/2), y: pixle_to_pt(120), cx: new_width, cy: new_height}
40
+ end
41
+ private :default_coords
42
+
43
+ def save_rel_xml(extract_path, index)
44
+ render_view('pictorial_rel.xml.erb', "#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", index: index)
45
+ end
46
+ private :save_rel_xml
47
+
48
+ def save_slide_xml(extract_path, index)
49
+ render_view('pictorial_slide.xml.erb', "#{extract_path}/ppt/slides/slide#{index}.xml")
50
+ end
51
+ private :save_slide_xml
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,63 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+ require 'fastimage'
4
+ require 'erb'
5
+
6
+ module Powerpoint
7
+ module Slide
8
+ class DescriptionPic
9
+ include Powerpoint::Util
10
+
11
+ attr_reader :title, :content, :image_name, :image_path, :coords
12
+
13
+ def initialize(options={})
14
+ require_arguments [:presentation, :title, :image_path, :content], options
15
+ options.each {|k, v| instance_variable_set("@#{k}", v)}
16
+ @coords = default_coords
17
+ @image_name = File.basename(@image_path)
18
+ end
19
+
20
+ def save(extract_path, index)
21
+ copy_media(extract_path, @image_path)
22
+ save_rel_xml(extract_path, index)
23
+ save_slide_xml(extract_path, index)
24
+ end
25
+
26
+ def file_type
27
+ File.extname(image_name).gsub('.', '')
28
+ end
29
+
30
+ def default_coords
31
+ slide_width = pixle_to_pt(720)
32
+ default_width = pixle_to_pt(550)
33
+ default_height = pixle_to_pt(300)
34
+
35
+ return {} unless dimensions = FastImage.size(image_path)
36
+ image_width, image_height = dimensions.map {|d| pixle_to_pt(d)}
37
+
38
+ capped_width = [default_width, image_width].min
39
+ w_ratio = capped_width / image_width.to_f
40
+
41
+ capped_height = [default_height, image_height].min
42
+ h_ratio = capped_height / image_height.to_f
43
+
44
+ ratio = [w_ratio, h_ratio].min
45
+
46
+ new_width = (image_width.to_f * ratio).round
47
+ new_height = (image_height.to_f * ratio).round
48
+ {x: (slide_width / 2) - (new_width/2), y: pixle_to_pt(60), cx: new_width, cy: new_height}
49
+ end
50
+ private :default_coords
51
+
52
+ def save_rel_xml(extract_path, index)
53
+ render_view('picture_description_rels.xml.erb', "#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", index: index)
54
+ end
55
+ private :save_rel_xml
56
+
57
+ def save_slide_xml(extract_path, index)
58
+ render_view('picture_description_slide.xml.erb', "#{extract_path}/ppt/slides/slide#{index}.xml")
59
+ end
60
+ private :save_slide_xml
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,56 @@
1
+ require 'zip/filesystem'
2
+ require 'fileutils'
3
+ require 'fastimage'
4
+ require 'erb'
5
+
6
+ module Powerpoint
7
+ module Slide
8
+ class TextPicSplit
9
+ include Powerpoint::Util
10
+
11
+ attr_reader :title, :content, :image_name, :image_path, :coords
12
+
13
+ def initialize(options={})
14
+ require_arguments [:presentation, :title, :image_path, :content], options
15
+ options.each {|k, v| instance_variable_set("@#{k}", v)}
16
+ @coords = default_coords
17
+ @image_name = File.basename(@image_path)
18
+ end
19
+
20
+ def save(extract_path, index)
21
+ copy_media(extract_path, @image_path)
22
+ save_rel_xml(extract_path, index)
23
+ save_slide_xml(extract_path, index)
24
+ end
25
+
26
+ def file_type
27
+ File.extname(image_name).gsub('.', '')
28
+ end
29
+
30
+ def default_coords
31
+ start_x = pixle_to_pt(360)
32
+ default_width = pixle_to_pt(300)
33
+
34
+ return {} unless dimensions = FastImage.size(image_path)
35
+ image_width, image_height = dimensions.map {|d| pixle_to_pt(d)}
36
+ new_width = default_width < image_width ? default_width : image_width
37
+ ratio = new_width / image_width.to_f
38
+ new_height = (image_height.to_f * ratio).round
39
+ {x: start_x, y: pixle_to_pt(120), cx: new_width, cy: new_height}
40
+ end
41
+ private :default_coords
42
+
43
+ def save_rel_xml(extract_path, index)
44
+ render_view('text_picture_split_rel.xml.erb', "#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", index: index)
45
+ end
46
+ private :save_rel_xml
47
+
48
+ def save_slide_xml(extract_path, index)
49
+ render_view('text_picture_split_slide.xml.erb', "#{extract_path}/ppt/slides/slide#{index}.xml")
50
+ end
51
+ private :save_slide_xml
52
+ end
53
+ end
54
+
55
+
56
+ end
@@ -0,0 +1,32 @@
1
+ require 'fileutils'
2
+ require 'erb'
3
+
4
+ module Powerpoint
5
+ module Slide
6
+ class Textual
7
+ include Powerpoint::Util
8
+
9
+ attr_reader :title, :content
10
+
11
+ def initialize(options={})
12
+ require_arguments [:title, :content], options
13
+ options.each {|k, v| instance_variable_set("@#{k}", v)}
14
+ end
15
+
16
+ def save(extract_path, index)
17
+ save_rel_xml(extract_path, index)
18
+ save_slide_xml(extract_path, index)
19
+ end
20
+
21
+ def save_rel_xml(extract_path, index)
22
+ render_view('textual_rel.xml.erb', "#{extract_path}/ppt/slides/_rels/slide#{index}.xml.rels", index: index)
23
+ end
24
+ private :save_rel_xml
25
+
26
+ def save_slide_xml(extract_path, index)
27
+ render_view('textual_slide.xml.erb', "#{extract_path}/ppt/slides/slide#{index}.xml")
28
+ end
29
+ private :save_slide_xml
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,39 @@
1
+ module Powerpoint
2
+ module Util
3
+
4
+ def pixle_to_pt(px)
5
+ px * 12700
6
+ end
7
+
8
+ def render_view(template_name, path, variables = {})
9
+ view_contents = read_template(template_name)
10
+ renderer = ERB.new(view_contents)
11
+ b = merge_variables(binding, variables)
12
+ data = renderer.result(b)
13
+
14
+ File.open(path, 'w') { |f| f << data.squish!.gsub('> <', '><') }
15
+ end
16
+
17
+ def read_template(filename)
18
+ File.read("#{Powerpoint::VIEW_PATH}/#{filename}")
19
+ end
20
+
21
+ def require_arguments(required_arguements, arguements)
22
+ raise ArgumentError unless required_arguements.all? {|required_key| arguements.keys.include? required_key}
23
+ end
24
+
25
+ def copy_media(extract_path, image_path)
26
+ image_name = File.basename(image_path)
27
+ dest_path = "#{extract_path}/ppt/media/#{image_name}"
28
+ FileUtils.copy_file(image_path, dest_path) unless File.exist?(dest_path)
29
+ end
30
+
31
+ def merge_variables(b, variables)
32
+ return b if variables.empty?
33
+ variables.each do |k,v|
34
+ b.local_variable_set(k, v)
35
+ end
36
+ b
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,3 @@
1
+ module Powerpoint
2
+ VERSION = "2.1.0.1"
3
+ end
@@ -0,0 +1,51 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+ <Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"
3
+ xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
4
+ <TotalTime>0</TotalTime>
5
+ <Words>43</Words>
6
+ <Application>Microsoft Macintosh PowerPoint</Application>
7
+ <PresentationFormat>On-screen Show (4:3)</PresentationFormat>
8
+ <Paragraphs>15</Paragraphs>
9
+ <Slides><%= slides.length %></Slides>
10
+ <Notes>0</Notes>
11
+ <HiddenSlides>0</HiddenSlides>
12
+ <MMClips>0</MMClips>
13
+ <ScaleCrop>false</ScaleCrop>
14
+ <HeadingPairs>
15
+ <vt:vector size="6" baseType="variant">
16
+ <vt:variant>
17
+ <vt:lpstr>Fonts Used</vt:lpstr>
18
+ </vt:variant>
19
+ <vt:variant>
20
+ <vt:i4>2</vt:i4>
21
+ </vt:variant>
22
+ <vt:variant>
23
+ <vt:lpstr>Theme</vt:lpstr>
24
+ </vt:variant>
25
+ <vt:variant>
26
+ <vt:i4>1</vt:i4>
27
+ </vt:variant>
28
+ <vt:variant>
29
+ <vt:lpstr>Slide Titles</vt:lpstr>
30
+ </vt:variant>
31
+ <vt:variant>
32
+ <vt:i4><%= slides.length %></vt:i4>
33
+ </vt:variant>
34
+ </vt:vector>
35
+ </HeadingPairs>
36
+ <TitlesOfParts>
37
+ <vt:vector size="<%= slides.length + 3 %>" baseType="lpstr">
38
+ <vt:lpstr>Arial</vt:lpstr>
39
+ <vt:lpstr>Calibri</vt:lpstr>
40
+ <vt:lpstr>Office Theme</vt:lpstr>
41
+ <% slides.each do |slide| %>
42
+ <vt:lpstr><%= slide.title %></vt:lpstr>
43
+ <% end %>
44
+ </vt:vector>
45
+ </TitlesOfParts>
46
+ <Company></Company>
47
+ <LinksUpToDate>false</LinksUpToDate>
48
+ <SharedDoc>false</SharedDoc>
49
+ <HyperlinksChanged>false</HyperlinksChanged>
50
+ <AppVersion>15.0000</AppVersion>
51
+ </Properties>
@@ -0,0 +1,211 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+ <p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
3
+ <p:cSld>
4
+ <p:spTree>
5
+ <p:nvGrpSpPr>
6
+ <p:cNvPr id="1" name=""/>
7
+ <p:cNvGrpSpPr/>
8
+ <p:nvPr/>
9
+ </p:nvGrpSpPr>
10
+ <p:grpSpPr>
11
+ <a:xfrm>
12
+ <a:off x="0" y="0"/>
13
+ <a:ext cx="0" cy="0"/>
14
+ <a:chOff x="0" y="0"/>
15
+ <a:chExt cx="0" cy="0"/>
16
+ </a:xfrm>
17
+ </p:grpSpPr>
18
+ <p:sp>
19
+ <p:nvSpPr>
20
+ <p:cNvPr id="2" name="Title"/>
21
+ <p:cNvSpPr>
22
+ <a:spLocks noGrp="1"/>
23
+ </p:cNvSpPr>
24
+ <p:nvPr />
25
+ </p:nvSpPr>
26
+ <p:spPr>
27
+ <a:xfrm>
28
+ <a:off x="1038200" y="518200"/>
29
+ <a:ext cx="10515600" cy="325563"/>
30
+ </a:xfrm>
31
+ </p:spPr>
32
+ <p:txBody>
33
+ <a:bodyPr/>
34
+ <a:lstStyle/>
35
+ <a:p>
36
+ <a:pPr algn="l"/>
37
+ <a:r>
38
+ <a:rPr lang="en-US" b="1" dirty="0" sz="2800" >
39
+ <a:solidFill>
40
+ <a:schemeClr val="dk2" />
41
+ </a:solidFill>
42
+ <a:latin typeface="Arvo" panose="02000000000000000000" pitchFamily="2" charset="77"/>
43
+ </a:rPr>
44
+ <a:t><%= title %></a:t>
45
+ </a:r>
46
+ </a:p>
47
+ </p:txBody>
48
+ </p:sp>
49
+ <p:sp>
50
+ <p:nvSpPr>
51
+ <p:cNvPr id="3" name="subtitle"/>
52
+ <p:cNvSpPr>
53
+ <a:spLocks noGrp="1"/>
54
+ </p:cNvSpPr>
55
+ <p:nvPr />
56
+ </p:nvSpPr>
57
+ <p:spPr>
58
+ <a:xfrm>
59
+ <a:off x="221510" y="145000"/>
60
+ <a:ext cx="10515600" cy="125563"/>
61
+ </a:xfrm>
62
+ </p:spPr>
63
+ <p:txBody>
64
+ <a:bodyPr/>
65
+ <a:lstStyle/>
66
+ <a:p>
67
+ <a:pPr algn="l"/>
68
+ <a:r>
69
+ <a:rPr lang="en-US" b="1" dirty="0" sz="800" >
70
+ <a:solidFill>
71
+ <a:schemeClr val="dk2" />
72
+ </a:solidFill>
73
+ </a:rPr>
74
+ <a:t><%= subtitle %></a:t>
75
+ </a:r>
76
+ </a:p>
77
+ </p:txBody>
78
+ </p:sp>
79
+ <p:sp>
80
+ <p:nvSpPr>
81
+ <p:cNvPr id="3" name="Page number"/>
82
+ <p:cNvSpPr>
83
+ <a:spLocks noGrp="1"/>
84
+ </p:cNvSpPr>
85
+ <p:nvPr />
86
+ </p:nvSpPr>
87
+ <p:spPr>
88
+ <a:xfrm>
89
+ <a:off x="8631800" y="152400"/>
90
+ <a:ext cx="105000" cy="325563"/>
91
+ </a:xfrm>
92
+ </p:spPr>
93
+ <p:txBody>
94
+ <a:bodyPr/>
95
+ <a:lstStyle/>
96
+ <a:p>
97
+ <a:pPr algn="r"/>
98
+ <a:r>
99
+ <a:rPr lang="en-US" b="1" dirty="0" sz="800" >
100
+ <a:solidFill>
101
+ <a:schemeClr val="dk2" />
102
+ </a:solidFill>
103
+ </a:rPr>
104
+ <a:t><%= page_number %></a:t>
105
+ </a:r>
106
+ </a:p>
107
+ </p:txBody>
108
+ </p:sp>
109
+ <p:pic>
110
+ <p:nvPicPr>
111
+ <p:cNvPr id="6" name="Task icon"/>
112
+ <p:cNvPicPr>
113
+ <a:picLocks noChangeAspect="1" noGrp="1"/>
114
+ </p:cNvPicPr>
115
+ <p:nvPr>
116
+ <p:ph idx="1"/>
117
+ </p:nvPr>
118
+ </p:nvPicPr>
119
+ <p:blipFill>
120
+ <a:blip r:embed="rId2">
121
+ <a:extLst>
122
+ <a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}">
123
+ <a14:useLocalDpi val="0" xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main"/>
124
+ </a:ext>
125
+ </a:extLst>
126
+ </a:blip>
127
+ <a:stretch>
128
+ <a:fillRect/>
129
+ </a:stretch>
130
+ </p:blipFill>
131
+ <p:spPr>
132
+ <a:xfrm>
133
+ <a:off x="231510" y="458200"/>
134
+ <a:ext cx="625563" cy="625563"/>
135
+ </a:xfrm>
136
+ </p:spPr>
137
+ </p:pic>
138
+ <p:pic>
139
+ <p:nvPicPr>
140
+ <p:cNvPr id="6" name="Butterfly logo small"/>
141
+ <p:cNvPicPr>
142
+ <a:picLocks noChangeAspect="1" noGrp="1"/>
143
+ </p:cNvPicPr>
144
+ <p:nvPr>
145
+ <p:ph idx="1"/>
146
+ </p:nvPr>
147
+ </p:nvPicPr>
148
+ <p:blipFill>
149
+ <a:blip r:embed="rId3">
150
+ <a:extLst>
151
+ <a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}">
152
+ <a14:useLocalDpi val="0" xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main"/>
153
+ </a:ext>
154
+ </a:extLst>
155
+ </a:blip>
156
+ <a:stretch>
157
+ <a:fillRect/>
158
+ </a:stretch>
159
+ </p:blipFill>
160
+ <p:spPr>
161
+ <a:xfrm>
162
+ <a:off x="11334927" y="145000"/>
163
+ <a:ext cx="625563" cy="221032"/>
164
+ </a:xfrm>
165
+ </p:spPr>
166
+ </p:pic>
167
+ <% images.each_with_index do |image, index| %>
168
+ <p:pic>
169
+ <p:nvPicPr>
170
+ <p:cNvPr id="<%= index + 6 %>" name="Content Placeholder <%= index + 4 %>">
171
+ <a:extLst>
172
+ <a:ext uri="{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}">
173
+ <a16:creationId xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" id="{A9A20F6E-12DB-C244-80E1-C21BB706AF8B}"/>
174
+ </a:ext>
175
+ </a:extLst>
176
+ </p:cNvPr>
177
+ <p:cNvPicPr>
178
+ <a:picLocks noChangeAspect="1"/>
179
+ </p:cNvPicPr>
180
+ <p:nvPr/>
181
+ </p:nvPicPr>
182
+ <p:blipFill>
183
+ <a:blip r:embed="rId<%= index + 4 %>" />
184
+ <a:stretch>
185
+ <a:fillRect/>
186
+ </a:stretch>
187
+ </p:blipFill>
188
+ <p:spPr>
189
+ <a:xfrm>
190
+ <a:off y ="<%= @image_y_offset %>" x="<%= @image_x_offset %>" />
191
+ <a:ext cy="<%= @image_y_scale %>" cx="<%= @image_x_scale %>" />
192
+ </a:xfrm>
193
+ <a:prstGeom prst="rect">
194
+ <a:avLst/>
195
+ </a:prstGeom>
196
+ </p:spPr>
197
+ </p:pic>
198
+
199
+ <% end %>
200
+
201
+ </p:spTree>
202
+ <p:extLst>
203
+ <p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}">
204
+ <p14:creationId val="1474098577" xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main"/>
205
+ </p:ext>
206
+ </p:extLst>
207
+ </p:cSld>
208
+ <p:clrMapOvr>
209
+ <a:masterClrMapping/>
210
+ </p:clrMapOvr>
211
+ </p:sld>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
3
+ <Relationship Id="rId1" Target="../slideLayouts/slideLayout<%= index % 10 +1 %>.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout"/>
4
+ <Relationship Id="rId2" Target="../media/<%= URI.parse(logo.gsub(" ","")).path.split("/").last %>" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
5
+ <Relationship Id="rId3" Target="../media/<%= URI.parse(task_icon.gsub(" ","")).path.split("/").last %>" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
6
+ <% images.each_with_index do |image, index| %>
7
+ <Relationship Id="rId<%= 4 + index %>" Target="../media/<%= URI.parse(image.gsub(" ","")).path.split("/").last %>" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"/>
8
+ <% end %>
9
+ </Relationships>