powerpoint-pro 2.1.0.1

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.
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>