radiant-clipped-extension-add-group 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. data/LICENSE +22 -0
  2. data/README.md +184 -0
  3. data/Rakefile +109 -0
  4. data/app/controllers/admin/assets_controller.rb +66 -0
  5. data/app/controllers/admin/page_attachments_controller.rb +18 -0
  6. data/app/helpers/admin/assets_helper.rb +16 -0
  7. data/app/helpers/admin/page_attachments_helper.rb +2 -0
  8. data/app/models/asset.rb +237 -0
  9. data/app/models/asset_type.rb +241 -0
  10. data/app/models/old_page_attachment.rb +26 -0
  11. data/app/models/page_attachment.rb +20 -0
  12. data/app/views/admin/assets/_asset.html.haml +12 -0
  13. data/app/views/admin/assets/_asset_table.html.haml +33 -0
  14. data/app/views/admin/assets/_errors.html.haml +3 -0
  15. data/app/views/admin/assets/_form.html.haml +25 -0
  16. data/app/views/admin/assets/_page_assets.html.haml +12 -0
  17. data/app/views/admin/assets/_search.html.haml +17 -0
  18. data/app/views/admin/assets/_search_results.html.haml +17 -0
  19. data/app/views/admin/assets/edit.html.haml +41 -0
  20. data/app/views/admin/assets/index.html.haml +19 -0
  21. data/app/views/admin/assets/new.html.haml +24 -0
  22. data/app/views/admin/assets/refresh.html.haml +14 -0
  23. data/app/views/admin/assets/remove.html.haml +16 -0
  24. data/app/views/admin/configuration/_clipped_edit.html.haml +8 -0
  25. data/app/views/admin/configuration/_clipped_show.html.haml +12 -0
  26. data/app/views/admin/page_attachments/_attachment.html.haml +25 -0
  27. data/app/views/admin/page_parts/_page_part.html.haml +21 -0
  28. data/app/views/admin/pages/_asset_popups.html.haml +42 -0
  29. data/app/views/admin/pages/_assets.html.haml +11 -0
  30. data/app/views/admin/removed/_assets_bucket.html.haml +8 -0
  31. data/app/views/admin/removed/_assets_container.html.haml +58 -0
  32. data/app/views/admin/removed/_bucket.html.haml +11 -0
  33. data/app/views/admin/removed/_bucket_asset.html.haml +9 -0
  34. data/app/views/admin/removed/_show_bucket_link.html.haml +4 -0
  35. data/app/views/admin/removed/_upload_to_page.html.haml +12 -0
  36. data/app/views/admin/removed/bucket/_iframe.html.haml +1 -0
  37. data/artwork/icons.png +0 -0
  38. data/clipped_extension.rb +52 -0
  39. data/config/initializers/interpolation.rb +6 -0
  40. data/config/initializers/processors.rb +43 -0
  41. data/config/initializers/radiant_config.rb +65 -0
  42. data/config/locales/de.yml +109 -0
  43. data/config/locales/en.yml +110 -0
  44. data/config/locales/nl.yml +107 -0
  45. data/config/locales/ru.yml +110 -0
  46. data/config/routes.rb +8 -0
  47. data/cucumber.yml +1 -0
  48. data/db/migrate/001_create_assets.rb +12 -0
  49. data/db/migrate/002_create_paperclip_attributes.rb +13 -0
  50. data/db/migrate/003_create_user_observer.rb +13 -0
  51. data/db/migrate/004_create_page_attachments.rb +19 -0
  52. data/db/migrate/005_rename_users.rb +13 -0
  53. data/db/migrate/20110513205050_asset_uuid.rb +11 -0
  54. data/db/migrate/20110606111250_update_configuration.rb +34 -0
  55. data/db/migrate/20110609101438_dimensions.rb +13 -0
  56. data/db/migrate/20121024064452_add_group_to_assets.rb +9 -0
  57. data/features/support/env.rb +11 -0
  58. data/features/support/paths.rb +22 -0
  59. data/lib/asset_tags.rb +350 -0
  60. data/lib/clipped_admin_ui.rb +32 -0
  61. data/lib/cloud.rb +41 -0
  62. data/lib/generators/templates/clipped_config.rb +53 -0
  63. data/lib/page_asset_associations.rb +13 -0
  64. data/lib/paperclip/frame_grab.rb +73 -0
  65. data/lib/paperclip/geometry_transformation.rb +80 -0
  66. data/lib/radiant-clipped-extension.rb +8 -0
  67. data/lib/tasks/clipped_extension_tasks.rake +124 -0
  68. data/lib/tasks/paperclip_tasks.rake +79 -0
  69. data/public/flash/ZeroClipboard.swf +0 -0
  70. data/public/images/admin/assets/add.png +0 -0
  71. data/public/images/admin/assets/archive_icon.png +0 -0
  72. data/public/images/admin/assets/audio_icon.png +0 -0
  73. data/public/images/admin/assets/audio_thumbnail.png +0 -0
  74. data/public/images/admin/assets/c_icon.png +0 -0
  75. data/public/images/admin/assets/copy.png +0 -0
  76. data/public/images/admin/assets/css_icon.png +0 -0
  77. data/public/images/admin/assets/database_icon.png +0 -0
  78. data/public/images/admin/assets/delete.png +0 -0
  79. data/public/images/admin/assets/document_icon.png +0 -0
  80. data/public/images/admin/assets/document_thumbnail.png +0 -0
  81. data/public/images/admin/assets/flash_icon.png +0 -0
  82. data/public/images/admin/assets/flash_thumbnail.png +0 -0
  83. data/public/images/admin/assets/font_icon.png +0 -0
  84. data/public/images/admin/assets/gzip_icon.png +0 -0
  85. data/public/images/admin/assets/html_icon.png +0 -0
  86. data/public/images/admin/assets/image_icon.png +0 -0
  87. data/public/images/admin/assets/image_thumbnail.png +0 -0
  88. data/public/images/admin/assets/java_icon.png +0 -0
  89. data/public/images/admin/assets/page_edit.png +0 -0
  90. data/public/images/admin/assets/perl_icon.png +0 -0
  91. data/public/images/admin/assets/php_icon.png +0 -0
  92. data/public/images/admin/assets/presentation_icon.png +0 -0
  93. data/public/images/admin/assets/python_icon.png +0 -0
  94. data/public/images/admin/assets/reorder_assets.png +0 -0
  95. data/public/images/admin/assets/ruby_icon.png +0 -0
  96. data/public/images/admin/assets/script_icon.png +0 -0
  97. data/public/images/admin/assets/spreadsheet_icon.png +0 -0
  98. data/public/images/admin/assets/tar_icon.png +0 -0
  99. data/public/images/admin/assets/unknown_icon.png +0 -0
  100. data/public/images/admin/assets/unknown_thumbnail.png +0 -0
  101. data/public/images/admin/assets/video_icon.png +0 -0
  102. data/public/images/admin/assets/video_thumbnail.png +0 -0
  103. data/public/images/admin/assets/xml_icon.png +0 -0
  104. data/public/images/admin/assets/zip_icon.png +0 -0
  105. data/public/javascripts/admin/assets.js +297 -0
  106. data/public/stylesheets/sass/admin/assets.sass +224 -0
  107. data/radiant-clipped-extension.gemspec +29 -0
  108. data/spec/ci/before_script +23 -0
  109. data/spec/ci/script +2 -0
  110. data/spec/controllers/admin/assets_controller_spec.rb +50 -0
  111. data/spec/controllers/admin/page_attachments_controller_spec.rb +50 -0
  112. data/spec/datasets/assets_dataset.rb +36 -0
  113. data/spec/fixtures/5k.png +0 -0
  114. data/spec/fixtures/test.flv +0 -0
  115. data/spec/lib/asset_tags_spec.rb +107 -0
  116. data/spec/lib/frame_grab_spec.rb +17 -0
  117. data/spec/lib/geometry_transformation_spec.rb +63 -0
  118. data/spec/models/asset_spec.rb +72 -0
  119. data/spec/models/asset_type_spec.rb +70 -0
  120. data/spec/models/post_processing_spec.rb +62 -0
  121. data/spec/spec.opts +7 -0
  122. data/spec/spec_helper.rb +36 -0
  123. data/wireframes/edit-page-assets-2.bmml +453 -0
  124. data/wireframes/edit-page-assets-2.png +0 -0
  125. data/wireframes/edit-page-assets-3.bmml +454 -0
  126. data/wireframes/edit-page-assets-3.png +0 -0
  127. data/wireframes/edit-page-assets.bmml +433 -0
  128. data/wireframes/edit-page-assets.png +0 -0
  129. data/wireframes/edit-page.bmml +174 -0
  130. data/wireframes/edit-page.png +0 -0
  131. metadata +281 -0
@@ -0,0 +1,70 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ module Paperclip
4
+ class Dummy < Processor
5
+ def initialize file, options = {}, attachment = nil
6
+ super
7
+ something = options[:something]
8
+ end
9
+ def make
10
+ @file
11
+ end
12
+ end
13
+ end
14
+
15
+ AssetType.new :simple, :mime_types => %w[test/this test/that]
16
+ AssetType.new :complex, :processors => [:dummy], :styles => {:something => "99x99>"}, :mime_types => %w[test/complex], :icon => 'document'
17
+ AssetType.new :configured, :processors => [:dummy], :mime_types => %w[test/configured]
18
+ AssetType.new :unstandard, :extensions => %w[unstandard nomimetype]
19
+
20
+ describe AssetType do
21
+ context 'without thumbnails' do
22
+ subject{ AssetType.find(:simple) }
23
+ its(:plural) { should == "simples" }
24
+ its(:mime_types) { should == ["test/this", "test/that"] }
25
+ its(:condition) { should == ["asset_content_type IN (?,?)", "test/this", "test/that"] }
26
+ its(:non_condition) { should == ["NOT asset_content_type IN (?,?)", "test/this", "test/that"] }
27
+ its(:paperclip_processors) { should be_empty}
28
+ its(:paperclip_styles) { should be_empty}
29
+ its(:icon) { should == "/images/admin/assets/simple_icon.png"}
30
+ its(:icon_path) { should == Rails.root + "public/images/admin/assets/simple_icon.png"}
31
+ end
32
+
33
+ context 'with initialized thumbnail sizes' do
34
+ before { Radiant.config["assets.create_complex_thumbnails?"] = true }
35
+ subject{ AssetType.find(:complex) }
36
+ its(:paperclip_processors) { should == [:dummy] }
37
+ its(:paperclip_styles) { should_not be_empty }
38
+ its(:paperclip_styles) { should == {:something => {:geometry => "99x99>"}} }
39
+ its(:icon) { should == "/images/admin/assets/document_icon.png"}
40
+ end
41
+
42
+ context 'with configured thumbnail sizes' do
43
+ before {
44
+ Radiant.config["assets.create_configured_thumbnails?"] = true
45
+ Radiant.config["assets.thumbnails.configured"] = "special:size=800x800>,format=jpg|tiny:size=10x10#,format=png|custom:size=1x1,convert_options=-quality 33 -interlace Plane"
46
+ }
47
+ subject{ AssetType.find(:configured) }
48
+ its(:paperclip_processors) { should == [:dummy] }
49
+ its(:paperclip_styles) { should == {
50
+ :special => {:geometry => "800x800>", :format => 'jpg'},
51
+ :tiny => {:geometry => "10x10#", :format => 'png'},
52
+ :custom => {:geometry => "1x1", :convert_options => '-quality 33 -interlace Plane'}
53
+ }}
54
+ end
55
+
56
+ context 'AssetType class methods' do
57
+ describe '.slice' do
58
+ AssetType.slice('simple', 'complex').should =~ [AssetType.find(:simple), AssetType.find(:complex)]
59
+ end
60
+
61
+ describe '.from_extension' do
62
+ AssetType.from_extension('nomimetype').should == AssetType.find(:unstandard)
63
+ end
64
+
65
+ describe '.from_mimetype' do
66
+ AssetType.from_mimetype('test/this').should == AssetType.find(:simple)
67
+ end
68
+ end
69
+
70
+ end
@@ -0,0 +1,62 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe Asset do
4
+ dataset :assets
5
+
6
+ # these are here to check that paperclip and our various add-ons are all working together.
7
+ # most of the components are also tested individually but in more abstract ways.
8
+
9
+ let(:asset) {
10
+ asset = assets(:test1)
11
+ asset.asset = File.new(File.join(File.dirname(__FILE__), "..", "fixtures", "5k.png"))
12
+ asset
13
+ }
14
+
15
+ describe "on assigning a file to an asset" do
16
+ before do
17
+ Radiant.config["assets.create_image_thumbnails?"] = true
18
+ Radiant.config["assets.thumbnails.configured"] = "special:size=800x800>,format=jpg|tiny:size=#10x10,format=png"
19
+ end
20
+
21
+ it "should have saved the asset" do
22
+ asset.new_record?.should be_false
23
+ end
24
+
25
+ it "should have calculated asset type" do
26
+ asset.asset_type.should == AssetType[:image]
27
+ end
28
+
29
+ it "should have recorded width and height and original extension" do
30
+ asset.original_width.should == 434
31
+ asset.original_height.should == 66
32
+ asset.original_extension.should == 'png'
33
+ end
34
+
35
+ it "should respond to original geometry" do
36
+ asset.original_geometry.should == Paperclip::Geometry.new(434,66)
37
+ end
38
+
39
+ it "should calculate thumbnail geometry" do
40
+ original_geometry = Paperclip::Geometry.new(434,66)
41
+ asset.geometry.should == original_geometry
42
+ asset.geometry(:icon).should == original_geometry * Paperclip::Geometry.parse("42x42#")
43
+ end
44
+
45
+ it "should respond to image dimension methods" do
46
+ asset.width.should == 434
47
+ asset.height.should == 66
48
+ asset.width(:icon).should == 42
49
+ asset.height(:icon).should == 42
50
+ end
51
+
52
+ it "should respond to image shape methods" do
53
+ asset.horizontal?.should be_true
54
+ asset.vertical?.should be_false
55
+ asset.square?.should be_false
56
+ asset.square?(:icon).should be_true
57
+ asset.orientation.should == 'horizontal'
58
+ asset.aspect.should == 434.0/66.0
59
+ end
60
+
61
+ end
62
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,7 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime
6
+ --reverse
7
+ --backtrace
@@ -0,0 +1,36 @@
1
+ unless defined? RADIANT_ROOT
2
+ ENV["RAILS_ENV"] = "test"
3
+ case
4
+ when ENV["RADIANT_ENV_FILE"]
5
+ require ENV["RADIANT_ENV_FILE"]
6
+ when File.dirname(__FILE__) =~ %r{vendor/radiant/vendor/extensions}
7
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../../")}/config/environment"
8
+ else
9
+ require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../")}/config/environment"
10
+ end
11
+ end
12
+ require "#{RADIANT_ROOT}/spec/spec_helper"
13
+
14
+ Dataset::Resolver.default << (File.dirname(__FILE__) + "/datasets")
15
+
16
+ if File.directory?(File.dirname(__FILE__) + "/matchers")
17
+ Dir[File.dirname(__FILE__) + "/matchers/*.rb"].each {|file| require file }
18
+ end
19
+
20
+ Spec::Runner.configure do |config|
21
+ # config.use_transactional_fixtures = true
22
+ # config.use_instantiated_fixtures = false
23
+ # config.fixture_path = RAILS_ROOT + '/spec/fixtures'
24
+
25
+ # You can declare fixtures for each behaviour like this:
26
+ # describe "...." do
27
+ # fixtures :table_a, :table_b
28
+ #
29
+ # Alternatively, if you prefer to declare them only once, you can
30
+ # do so here, like so ...
31
+ #
32
+ # config.global_fixtures = :table_a, :table_b
33
+ #
34
+ # If you declare global fixtures, be aware that they will be declared
35
+ # for all of your examples, even those that don't use them.
36
+ end
@@ -0,0 +1,453 @@
1
+ <mockup version="1.0" skin="sketch" measuredW="1896" measuredH="1195" mockupW="1891" mockupH="1195">
2
+ <controls>
3
+ <control controlID="0" controlTypeID="com.balsamiq.mockups::TabBar" x="322" y="367" w="787" h="400" measuredW="294" measuredH="100" zOrder="1" locked="false" isInGroup="-1">
4
+ <controlProperties>
5
+ <borderStyle>square</borderStyle>
6
+ <selectedIndex>0</selectedIndex>
7
+ <size>16</size>
8
+ <text>%20%20body%20%20%20%20%20%20%2C%20%20%20sidebar%20%20%20%20%20</text>
9
+ </controlProperties>
10
+ </control>
11
+ <control controlID="1" controlTypeID="com.balsamiq.mockups::Icon" x="1076" y="367" w="-1" h="-1" measuredW="24" measuredH="24" zOrder="2" locked="false" isInGroup="-1">
12
+ <controlProperties>
13
+ <icon>CircledPlusIcon%7Csmall</icon>
14
+ </controlProperties>
15
+ </control>
16
+ <control controlID="2" controlTypeID="com.balsamiq.mockups::TextArea" x="337" y="444" w="757" h="308" measuredW="200" measuredH="140" zOrder="3" locked="false" isInGroup="-1"/>
17
+ <control controlID="3" controlTypeID="com.balsamiq.mockups::Icon" x="407" y="376" w="-1" h="-1" measuredW="16" measuredH="16" zOrder="4" locked="false" isInGroup="-1">
18
+ <controlProperties>
19
+ <icon>CircledXIcon%7Cxsmall</icon>
20
+ </controlProperties>
21
+ </control>
22
+ <control controlID="4" controlTypeID="com.balsamiq.mockups::Icon" x="515" y="376" w="-1" h="-1" measuredW="16" measuredH="16" zOrder="5" locked="false" isInGroup="-1">
23
+ <controlProperties>
24
+ <icon>CircledXIcon%7Cxsmall</icon>
25
+ </controlProperties>
26
+ </control>
27
+ <control controlID="5" controlTypeID="com.balsamiq.mockups::ComboBox" x="374" y="412" w="-1" h="-1" measuredW="73" measuredH="23" zOrder="6" locked="false" isInGroup="-1">
28
+ <controlProperties>
29
+ <text>Textile</text>
30
+ </controlProperties>
31
+ </control>
32
+ <control controlID="6" controlTypeID="com.balsamiq.mockups::Label" x="337" y="413" w="-1" h="-1" measuredW="37" measuredH="23" zOrder="7" locked="false" isInGroup="-1">
33
+ <controlProperties>
34
+ <text>Filter</text>
35
+ </controlProperties>
36
+ </control>
37
+ <control controlID="8" controlTypeID="com.balsamiq.mockups::ComboBox" x="322" y="979" w="125" h="-1" measuredW="83" measuredH="23" zOrder="8" locked="false" isInGroup="-1">
38
+ <controlProperties>
39
+ <text>%3Cinherit%3E</text>
40
+ </controlProperties>
41
+ </control>
42
+ <control controlID="9" controlTypeID="com.balsamiq.mockups::Label" x="322" y="956" w="-1" h="-1" measuredW="45" measuredH="23" zOrder="9" locked="false" isInGroup="-1">
43
+ <controlProperties>
44
+ <text>Layout</text>
45
+ </controlProperties>
46
+ </control>
47
+ <control controlID="10" controlTypeID="com.balsamiq.mockups::ComboBox" x="460" y="979" w="125" h="-1" measuredW="88" measuredH="23" zOrder="10" locked="false" isInGroup="-1">
48
+ <controlProperties>
49
+ <text>Published</text>
50
+ </controlProperties>
51
+ </control>
52
+ <control controlID="11" controlTypeID="com.balsamiq.mockups::Label" x="460" y="956" w="-1" h="-1" measuredW="45" measuredH="23" zOrder="11" locked="false" isInGroup="-1">
53
+ <controlProperties>
54
+ <text>Status</text>
55
+ </controlProperties>
56
+ </control>
57
+ <control controlID="13" controlTypeID="com.balsamiq.mockups::Label" x="600" y="956" w="-1" h="-1" measuredW="82" measuredH="23" zOrder="12" locked="false" isInGroup="-1">
58
+ <controlProperties>
59
+ <text>Published%20On</text>
60
+ </controlProperties>
61
+ </control>
62
+ <control controlID="14" controlTypeID="com.balsamiq.mockups::DateChooser" x="600" y="976" w="163" h="-1" measuredW="136" measuredH="27" zOrder="13" locked="false" isInGroup="-1">
63
+ <controlProperties>
64
+ <text>March%2022%2C%202011</text>
65
+ </controlProperties>
66
+ </control>
67
+ <control controlID="15" controlTypeID="com.balsamiq.mockups::TabBar" x="300" y="114" w="829" h="55" measuredW="486" measuredH="100" zOrder="14" locked="false" isInGroup="-1">
68
+ <controlProperties>
69
+ <borderStyle>none</borderStyle>
70
+ <selectedIndex>0</selectedIndex>
71
+ <size>18</size>
72
+ <text>%20%20Content%20%20%2C%20%20%20Assets%20%20%2C%20%20%20Design%20%20%2C%20%20%20Settings%20%20</text>
73
+ </controlProperties>
74
+ </control>
75
+ <control controlID="16" controlTypeID="com.balsamiq.mockups::BrowserWindow" x="293" y="24" w="843" h="1134" measuredW="450" measuredH="400" zOrder="0" locked="false" isInGroup="-1">
76
+ <controlProperties>
77
+ <text>Radiant%20CMS%20-%20Publishing%20for%20Small%20Teams%0Ahttp%3A//website.com/admin/pages/123/edit</text>
78
+ </controlProperties>
79
+ </control>
80
+ <control controlID="19" controlTypeID="__group__" x="803" y="110" w="301" h="27" measuredW="301" measuredH="27" zOrder="15" locked="false" isInGroup="-1">
81
+ <groupChildrenDescriptors>
82
+ <control controlID="0" controlTypeID="com.balsamiq.mockups::PointyButton" x="224" y="0" w="-1" h="-1" measuredW="77" measuredH="27" zOrder="0" locked="false" isInGroup="19">
83
+ <controlProperties>
84
+ <direction>center</direction>
85
+ <text>View%20Site</text>
86
+ </controlProperties>
87
+ </control>
88
+ <control controlID="1" controlTypeID="com.balsamiq.mockups::Label" x="0" y="3" w="-1" h="-1" measuredW="217" measuredH="23" zOrder="1" locked="false" isInGroup="19">
89
+ <controlProperties>
90
+ <bold>false</bold>
91
+ <text>Logged%20in%20as%20%5BAdministrator%5D%20%28%5BLogout%5D%29</text>
92
+ </controlProperties>
93
+ </control>
94
+ </groupChildrenDescriptors>
95
+ </control>
96
+ <control controlID="20" controlTypeID="com.balsamiq.mockups::HRule" x="300" y="189" w="829" h="-1" measuredW="100" measuredH="5" zOrder="16" locked="false" isInGroup="-1"/>
97
+ <control controlID="21" controlTypeID="com.balsamiq.mockups::Title" x="318" y="211" w="-1" h="-1" measuredW="81" measuredH="29" zOrder="18" locked="false" isInGroup="-1">
98
+ <controlProperties>
99
+ <size>18</size>
100
+ <text>Edit%20Page</text>
101
+ </controlProperties>
102
+ </control>
103
+ <control controlID="23" controlTypeID="com.balsamiq.mockups::Canvas" x="309" y="203" w="812" h="42" measuredW="100" measuredH="70" zOrder="17" locked="false" isInGroup="-1">
104
+ <controlProperties>
105
+ <borderStyle>none</borderStyle>
106
+ <color>13421772</color>
107
+ </controlProperties>
108
+ </control>
109
+ <control controlID="24" controlTypeID="com.balsamiq.mockups::TextArea" x="322" y="287" w="787" h="44" measuredW="200" measuredH="140" zOrder="20" locked="false" isInGroup="-1">
110
+ <controlProperties>
111
+ <size>28</size>
112
+ <text>First%20Post</text>
113
+ </controlProperties>
114
+ </control>
115
+ <control controlID="25" controlTypeID="com.balsamiq.mockups::Label" x="322" y="264" w="-1" h="-1" measuredW="66" measuredH="23" zOrder="21" locked="false" isInGroup="-1">
116
+ <controlProperties>
117
+ <text>Page%20Title</text>
118
+ </controlProperties>
119
+ </control>
120
+ <control controlID="26" controlTypeID="com.balsamiq.mockups::PointyButton" x="322" y="327" w="-1" h="-1" measuredW="64" measuredH="27" zOrder="19" locked="false" isInGroup="-1">
121
+ <controlProperties>
122
+ <direction>center</direction>
123
+ <text>More%20%u25BE</text>
124
+ </controlProperties>
125
+ </control>
126
+ <control controlID="27" controlTypeID="com.balsamiq.mockups::Canvas" x="322" y="1022" w="787" h="58" measuredW="100" measuredH="70" zOrder="22" locked="false" isInGroup="-1">
127
+ <controlProperties>
128
+ <borderStyle>roundedSolid</borderStyle>
129
+ </controlProperties>
130
+ </control>
131
+ <control controlID="28" controlTypeID="com.balsamiq.mockups::Button" x="337" y="1037" w="-1" h="-1" measuredW="106" measuredH="28" zOrder="23" locked="false" isInGroup="-1">
132
+ <controlProperties>
133
+ <text>Save%20Changes</text>
134
+ </controlProperties>
135
+ </control>
136
+ <control controlID="29" controlTypeID="com.balsamiq.mockups::Button" x="451" y="1037" w="-1" h="-1" measuredW="179" measuredH="28" zOrder="24" locked="false" isInGroup="-1">
137
+ <controlProperties>
138
+ <text>Save%20and%20Continue%20Editing</text>
139
+ </controlProperties>
140
+ </control>
141
+ <control controlID="30" controlTypeID="com.balsamiq.mockups::Button" x="639" y="1037" w="-1" h="-1" measuredW="70" measuredH="28" zOrder="25" locked="false" isInGroup="-1">
142
+ <controlProperties>
143
+ <text>Preview</text>
144
+ </controlProperties>
145
+ </control>
146
+ <control controlID="31" controlTypeID="com.balsamiq.mockups::Label" x="717" y="1039" w="-1" h="-1" measuredW="61" measuredH="23" zOrder="26" locked="false" isInGroup="-1">
147
+ <controlProperties>
148
+ <bold>false</bold>
149
+ <text>or%20%5BCancel%5D</text>
150
+ </controlProperties>
151
+ </control>
152
+ <control controlID="32" controlTypeID="com.balsamiq.mockups::Canvas" x="322" y="780" w="787" h="159" measuredW="100" measuredH="70" zOrder="27" locked="false" isInGroup="-1">
153
+ <controlProperties>
154
+ <borderStyle>roundedSolid</borderStyle>
155
+ </controlProperties>
156
+ </control>
157
+ <control controlID="33" controlTypeID="com.balsamiq.mockups::Label" x="336" y="792" w="-1" h="-1" measuredW="103" measuredH="23" zOrder="28" locked="false" isInGroup="-1">
158
+ <controlProperties>
159
+ <size>13</size>
160
+ <text>Attached%20Assets</text>
161
+ </controlProperties>
162
+ </control>
163
+ <control controlID="40" controlTypeID="com.balsamiq.mockups::Image" x="460" y="820" w="110" h="104" measuredW="77" measuredH="79" zOrder="29" locked="false" isInGroup="-1"/>
164
+ <control controlID="41" controlTypeID="com.balsamiq.mockups::Image" x="583" y="820" w="110" h="104" measuredW="77" measuredH="79" zOrder="30" locked="false" isInGroup="-1"/>
165
+ <control controlID="42" controlTypeID="com.balsamiq.mockups::Image" x="705" y="820" w="110" h="104" measuredW="77" measuredH="79" zOrder="31" locked="false" isInGroup="-1"/>
166
+ <control controlID="43" controlTypeID="com.balsamiq.mockups::Image" x="828" y="820" w="110" h="104" measuredW="77" measuredH="79" zOrder="32" locked="false" isInGroup="-1"/>
167
+ <control controlID="45" controlTypeID="com.balsamiq.mockups::Image" x="951" y="820" w="110" h="104" measuredW="77" measuredH="79" zOrder="33" locked="false" isInGroup="-1"/>
168
+ <control controlID="47" controlTypeID="com.balsamiq.mockups::Canvas" x="1069" y="820" w="31" h="104" measuredW="100" measuredH="70" zOrder="34" locked="false" isInGroup="-1"/>
169
+ <control controlID="48" controlTypeID="com.balsamiq.mockups::Canvas" x="1090" y="820" w="10" h="104" measuredW="100" measuredH="70" zOrder="35" locked="false" isInGroup="-1">
170
+ <controlProperties>
171
+ <borderStyle>none</borderStyle>
172
+ </controlProperties>
173
+ </control>
174
+ <control controlID="51" controlTypeID="com.balsamiq.mockups::Canvas" x="337" y="820" w="110" h="104" measuredW="100" measuredH="70" zOrder="36" locked="false" isInGroup="-1"/>
175
+ <control controlID="52" controlTypeID="com.balsamiq.mockups::Label" x="358" y="832" w="-1" h="-1" measuredW="55" measuredH="20" zOrder="37" locked="false" isInGroup="-1">
176
+ <controlProperties>
177
+ <size>11</size>
178
+ <text>image.png</text>
179
+ </controlProperties>
180
+ </control>
181
+ <control controlID="54" controlTypeID="com.balsamiq.mockups::PointyButton" x="351" y="858" w="77" h="-1" measuredW="59" measuredH="27" zOrder="38" locked="false" isInGroup="-1">
182
+ <controlProperties>
183
+ <direction>center</direction>
184
+ <text>Insert</text>
185
+ </controlProperties>
186
+ </control>
187
+ <control controlID="56" controlTypeID="com.balsamiq.mockups::Arrow" x="220" y="805" w="121" h="30" measuredW="150" measuredH="100" zOrder="39" locked="false" isInGroup="-1">
188
+ <controlProperties>
189
+ <curvature>0</curvature>
190
+ <leftArrow>false</leftArrow>
191
+ </controlProperties>
192
+ </control>
193
+ <control controlID="57" controlTypeID="com.balsamiq.mockups::Label" x="87" y="770" w="141" h="67" measuredW="337" measuredH="24" zOrder="40" locked="false" isInGroup="-1">
194
+ <controlProperties>
195
+ <bold>false</bold>
196
+ <size>14</size>
197
+ <text>Hovering%20over%20an%20asset%20reveals%20it%27s%20name%20and%20actions</text>
198
+ </controlProperties>
199
+ </control>
200
+ <control controlID="58" controlTypeID="com.balsamiq.mockups::Arrow" x="251" y="881" w="93" h="58" measuredW="150" measuredH="100" zOrder="41" locked="false" isInGroup="-1">
201
+ <controlProperties>
202
+ <curvature>0</curvature>
203
+ <direction>bottom</direction>
204
+ <leftArrow>false</leftArrow>
205
+ </controlProperties>
206
+ </control>
207
+ <control controlID="59" controlTypeID="com.balsamiq.mockups::Label" x="95" y="915" w="156" h="67" measuredW="449" measuredH="24" zOrder="42" locked="false" isInGroup="-1">
208
+ <controlProperties>
209
+ <bold>false</bold>
210
+ <size>14</size>
211
+ <text>Click%20%22Insert%22%20to%20insert%20the%20tags%20for%20that%20asset%20into%20the%20selected%20part.</text>
212
+ </controlProperties>
213
+ </control>
214
+ <control controlID="76" controlTypeID="com.balsamiq.mockups::Canvas" x="1219" y="203" w="620" h="449" measuredW="100" measuredH="70" zOrder="43" locked="false" isInGroup="-1">
215
+ <controlProperties>
216
+ <backgroundAlpha>0.25</backgroundAlpha>
217
+ <borderColor>10066329</borderColor>
218
+ <borderStyle>roundedSolid</borderStyle>
219
+ <color>0</color>
220
+ </controlProperties>
221
+ </control>
222
+ <control controlID="77" controlTypeID="com.balsamiq.mockups::Canvas" x="1229" y="214" w="600" h="430" measuredW="100" measuredH="70" zOrder="44" locked="false" isInGroup="-1"/>
223
+ <control controlID="78" controlTypeID="com.balsamiq.mockups::HRule" x="1233" y="248" w="591" h="-1" measuredW="100" measuredH="5" zOrder="45" locked="false" isInGroup="-1"/>
224
+ <control controlID="79" controlTypeID="com.balsamiq.mockups::Label" x="1238" y="221" w="-1" h="-1" measuredW="94" measuredH="27" zOrder="46" locked="false" isInGroup="-1">
225
+ <controlProperties>
226
+ <size>16</size>
227
+ <text>Insert%20Asset</text>
228
+ </controlProperties>
229
+ </control>
230
+ <control controlID="91" controlTypeID="com.balsamiq.mockups::Canvas" x="1257" y="294" w="545" h="270" measuredW="100" measuredH="70" zOrder="48" locked="false" isInGroup="-1"/>
231
+ <control controlID="98" controlTypeID="com.balsamiq.mockups::SearchBox" x="1655" y="264" w="146" h="-1" measuredW="66" measuredH="25" zOrder="54" locked="false" isInGroup="-1">
232
+ <controlProperties>
233
+ <text>Search</text>
234
+ </controlProperties>
235
+ </control>
236
+ <control controlID="106" controlTypeID="com.balsamiq.mockups::VerticalScrollBar" x="1779" y="302" w="-1" h="256" measuredW="16" measuredH="100" zOrder="86" locked="false" isInGroup="-1"/>
237
+ <control controlID="115" controlTypeID="com.balsamiq.mockups::Canvas" x="5" y="0" w="1891" h="1195" measuredW="100" measuredH="70" zOrder="47" locked="true" isInGroup="-1">
238
+ <controlProperties>
239
+ <backgroundAlpha>0</backgroundAlpha>
240
+ <borderStyle>none</borderStyle>
241
+ </controlProperties>
242
+ </control>
243
+ <control controlID="118" controlTypeID="com.balsamiq.mockups::Image" x="1279" y="316" w="110" h="104" measuredW="77" measuredH="79" zOrder="83" locked="false" isInGroup="-1"/>
244
+ <control controlID="119" controlTypeID="com.balsamiq.mockups::Image" x="1408" y="316" w="110" h="104" measuredW="77" measuredH="79" zOrder="49" locked="false" isInGroup="-1"/>
245
+ <control controlID="120" controlTypeID="com.balsamiq.mockups::Image" x="1535" y="316" w="110" h="104" measuredW="77" measuredH="79" zOrder="50" locked="false" isInGroup="-1"/>
246
+ <control controlID="122" controlTypeID="com.balsamiq.mockups::Image" x="1279" y="439" w="110" h="104" measuredW="77" measuredH="79" zOrder="51" locked="false" isInGroup="-1"/>
247
+ <control controlID="123" controlTypeID="com.balsamiq.mockups::Image" x="1408" y="439" w="110" h="104" measuredW="77" measuredH="79" zOrder="52" locked="false" isInGroup="-1"/>
248
+ <control controlID="124" controlTypeID="com.balsamiq.mockups::Image" x="1535" y="439" w="110" h="104" measuredW="77" measuredH="79" zOrder="53" locked="false" isInGroup="-1"/>
249
+ <control controlID="136" controlTypeID="com.balsamiq.mockups::PointyButton" x="1293" y="261" w="50" h="-1" measuredW="58" measuredH="27" zOrder="55" locked="false" isInGroup="-1">
250
+ <controlProperties>
251
+ <bold>false</bold>
252
+ <direction>center</direction>
253
+ <size>12</size>
254
+ <text>Images</text>
255
+ </controlProperties>
256
+ </control>
257
+ <control controlID="137" controlTypeID="com.balsamiq.mockups::Label" x="1257" y="264" w="-1" h="-1" measuredW="21" measuredH="21" zOrder="56" locked="false" isInGroup="-1">
258
+ <controlProperties>
259
+ <bold>false</bold>
260
+ <size>12</size>
261
+ <text>All</text>
262
+ </controlProperties>
263
+ </control>
264
+ <control controlID="138" controlTypeID="com.balsamiq.mockups::Label" x="1434" y="264" w="-1" h="-1" measuredW="34" measuredH="21" zOrder="57" locked="false" isInGroup="-1">
265
+ <controlProperties>
266
+ <bold>false</bold>
267
+ <size>12</size>
268
+ <text>Video</text>
269
+ </controlProperties>
270
+ </control>
271
+ <control controlID="139" controlTypeID="com.balsamiq.mockups::Label" x="1480" y="264" w="-1" h="-1" measuredW="34" measuredH="21" zOrder="58" locked="false" isInGroup="-1">
272
+ <controlProperties>
273
+ <bold>false</bold>
274
+ <size>12</size>
275
+ <text>Audio</text>
276
+ </controlProperties>
277
+ </control>
278
+ <control controlID="140" controlTypeID="com.balsamiq.mockups::Label" x="1358" y="264" w="-1" h="-1" measuredW="62" measuredH="21" zOrder="59" locked="false" isInGroup="-1">
279
+ <controlProperties>
280
+ <bold>false</bold>
281
+ <size>12</size>
282
+ <text>Documents</text>
283
+ </controlProperties>
284
+ </control>
285
+ <control controlID="141" controlTypeID="com.balsamiq.mockups::Label" x="1525" y="264" w="-1" h="-1" measuredW="37" measuredH="21" zOrder="60" locked="false" isInGroup="-1">
286
+ <controlProperties>
287
+ <bold>false</bold>
288
+ <size>12</size>
289
+ <text>Other</text>
290
+ </controlProperties>
291
+ </control>
292
+ <control controlID="142" controlTypeID="com.balsamiq.mockups::Button" x="1655" y="597" w="83" h="28" measuredW="62" measuredH="28" zOrder="61" locked="false" isInGroup="-1">
293
+ <controlProperties>
294
+ <text>Insert</text>
295
+ </controlProperties>
296
+ </control>
297
+ <control controlID="143" controlTypeID="com.balsamiq.mockups::Label" x="1743" y="600" w="-1" h="-1" measuredW="61" measuredH="23" zOrder="62" locked="false" isInGroup="-1">
298
+ <controlProperties>
299
+ <bold>false</bold>
300
+ <text>or%20%5BCancel%5D</text>
301
+ </controlProperties>
302
+ </control>
303
+ <control controlID="144" controlTypeID="com.balsamiq.mockups::HRule" x="1229" y="580" w="595" h="-1" measuredW="100" measuredH="5" zOrder="63" locked="false" isInGroup="-1"/>
304
+ <control controlID="168" controlTypeID="com.balsamiq.mockups::Arrow" x="544" y="311" w="654" h="100" measuredW="150" measuredH="100" zOrder="64" locked="false" isInGroup="-1">
305
+ <controlProperties>
306
+ <curvature>0</curvature>
307
+ <direction>bottom</direction>
308
+ <leftArrow>false</leftArrow>
309
+ </controlProperties>
310
+ </control>
311
+ <control controlID="169" controlTypeID="com.balsamiq.mockups::Label" x="896" y="413" w="-1" h="-1" measuredW="198" measuredH="23" zOrder="65" locked="false" isInGroup="-1">
312
+ <controlProperties>
313
+ <text>Reference%20%20%5BFilter%5D%20%5BAvailable%20Tags%5D</text>
314
+ </controlProperties>
315
+ </control>
316
+ <control controlID="170" controlTypeID="com.balsamiq.mockups::Label" x="461" y="413" w="-1" h="-1" measuredW="43" measuredH="23" zOrder="66" locked="false" isInGroup="-1">
317
+ <controlProperties>
318
+ <text>Insert</text>
319
+ </controlProperties>
320
+ </control>
321
+ <control controlID="171" controlTypeID="com.balsamiq.mockups::Icon" x="506" y="411" w="-1" h="-1" measuredW="24" measuredH="24" zOrder="67" locked="false" isInGroup="-1">
322
+ <controlProperties>
323
+ <icon>ImageIcon%7Csmall</icon>
324
+ </controlProperties>
325
+ </control>
326
+ <control controlID="173" controlTypeID="com.balsamiq.mockups::Button" x="1256" y="595" w="83" h="28" measuredW="76" measuredH="28" zOrder="68" locked="false" isInGroup="-1">
327
+ <controlProperties>
328
+ <text>Upload...</text>
329
+ </controlProperties>
330
+ </control>
331
+ <control controlID="174" controlTypeID="com.balsamiq.mockups::Canvas" x="1219" y="765" w="372" h="275" measuredW="100" measuredH="70" zOrder="69" locked="false" isInGroup="-1">
332
+ <controlProperties>
333
+ <backgroundAlpha>0.25</backgroundAlpha>
334
+ <borderColor>10066329</borderColor>
335
+ <borderStyle>roundedSolid</borderStyle>
336
+ <color>0</color>
337
+ </controlProperties>
338
+ </control>
339
+ <control controlID="175" controlTypeID="com.balsamiq.mockups::Canvas" x="1229" y="776" w="352" h="254" measuredW="100" measuredH="70" zOrder="70" locked="false" isInGroup="-1"/>
340
+ <control controlID="176" controlTypeID="com.balsamiq.mockups::HRule" x="1229" y="810" w="349" h="-1" measuredW="100" measuredH="5" zOrder="71" locked="false" isInGroup="-1"/>
341
+ <control controlID="177" controlTypeID="com.balsamiq.mockups::Label" x="1238" y="783" w="-1" h="-1" measuredW="99" measuredH="27" zOrder="72" locked="false" isInGroup="-1">
342
+ <controlProperties>
343
+ <size>16</size>
344
+ <text>Upload%20Asset</text>
345
+ </controlProperties>
346
+ </control>
347
+ <control controlID="178" controlTypeID="com.balsamiq.mockups::Label" x="1247" y="896" w="-1" h="-1" measuredW="163" measuredH="23" zOrder="73" locked="false" isInGroup="-1">
348
+ <controlProperties>
349
+ <bold>false</bold>
350
+ <text>*Alt%20Text%20or%20Title*%20%28optional%29</text>
351
+ </controlProperties>
352
+ </control>
353
+ <control controlID="179" controlTypeID="com.balsamiq.mockups::TextInput" x="1247" y="919" w="316" h="-1" measuredW="79" measuredH="27" zOrder="74" locked="false" isInGroup="-1">
354
+ <controlProperties>
355
+ <text/>
356
+ </controlProperties>
357
+ </control>
358
+ <control controlID="180" controlTypeID="com.balsamiq.mockups::Button" x="1370" y="987" w="128" h="28" measuredW="121" measuredH="28" zOrder="75" locked="false" isInGroup="-1">
359
+ <controlProperties>
360
+ <text>Upload%20%26%20Insert</text>
361
+ </controlProperties>
362
+ </control>
363
+ <control controlID="181" controlTypeID="com.balsamiq.mockups::Label" x="1503" y="990" w="-1" h="-1" measuredW="61" measuredH="23" zOrder="76" locked="false" isInGroup="-1">
364
+ <controlProperties>
365
+ <bold>false</bold>
366
+ <text>or%20%5BCancel%5D</text>
367
+ </controlProperties>
368
+ </control>
369
+ <control controlID="182" controlTypeID="com.balsamiq.mockups::TextInput" x="1247" y="858" w="227" h="-1" measuredW="72" measuredH="27" zOrder="77" locked="false" isInGroup="-1">
370
+ <controlProperties>
371
+ <text>image.png</text>
372
+ </controlProperties>
373
+ </control>
374
+ <control controlID="183" controlTypeID="com.balsamiq.mockups::Label" x="1247" y="833" w="-1" h="-1" measuredW="70" measuredH="23" zOrder="78" locked="false" isInGroup="-1">
375
+ <controlProperties>
376
+ <text>Choose%20File</text>
377
+ </controlProperties>
378
+ </control>
379
+ <control controlID="184" controlTypeID="com.balsamiq.mockups::Button" x="1474" y="858" w="-1" h="-1" measuredW="89" measuredH="28" zOrder="79" locked="false" isInGroup="-1">
380
+ <controlProperties>
381
+ <text>Choose%20File</text>
382
+ </controlProperties>
383
+ </control>
384
+ <control controlID="185" controlTypeID="com.balsamiq.mockups::HRule" x="1229" y="974" w="347" h="-1" measuredW="100" measuredH="5" zOrder="80" locked="false" isInGroup="-1"/>
385
+ <control controlID="186" controlTypeID="com.balsamiq.mockups::Arrow" x="1298" y="631" w="20" h="121" measuredW="150" measuredH="100" zOrder="81" locked="false" isInGroup="-1">
386
+ <controlProperties>
387
+ <curvature>0</curvature>
388
+ <direction>top</direction>
389
+ <leftArrow>false</leftArrow>
390
+ </controlProperties>
391
+ </control>
392
+ <control controlID="187" controlTypeID="com.balsamiq.mockups::Canvas" x="1273" y="306" w="122" h="123" measuredW="100" measuredH="70" zOrder="82" locked="false" isInGroup="-1">
393
+ <controlProperties>
394
+ <backgroundAlpha>0.5</backgroundAlpha>
395
+ <borderStyle>none</borderStyle>
396
+ <color>7317724</color>
397
+ </controlProperties>
398
+ </control>
399
+ <control controlID="188" controlTypeID="com.balsamiq.mockups::Image" x="1661" y="316" w="110" h="104" measuredW="77" measuredH="79" zOrder="84" locked="false" isInGroup="-1"/>
400
+ <control controlID="189" controlTypeID="com.balsamiq.mockups::Image" x="1661" y="439" w="110" h="104" measuredW="77" measuredH="79" zOrder="85" locked="false" isInGroup="-1"/>
401
+ <control controlID="190" controlTypeID="com.balsamiq.mockups::Icon" x="537" y="411" w="-1" h="-1" measuredW="24" measuredH="24" zOrder="87" locked="false" isInGroup="-1">
402
+ <controlProperties>
403
+ <icon>DocEmptyIcon%7Csmall</icon>
404
+ </controlProperties>
405
+ </control>
406
+ <control controlID="191" controlTypeID="com.balsamiq.mockups::Icon" x="570" y="411" w="-1" h="-1" measuredW="24" measuredH="24" zOrder="88" locked="false" isInGroup="-1">
407
+ <controlProperties>
408
+ <icon>VideoCameraIcon%7Csmall</icon>
409
+ </controlProperties>
410
+ </control>
411
+ <control controlID="192" controlTypeID="com.balsamiq.mockups::Arrow" x="462" y="516" w="753" h="276" measuredW="150" measuredH="100" zOrder="89" locked="false" isInGroup="-1">
412
+ <controlProperties>
413
+ <curvature>0</curvature>
414
+ <direction>top</direction>
415
+ <leftArrow>true</leftArrow>
416
+ <rightArrow>false</rightArrow>
417
+ </controlProperties>
418
+ </control>
419
+ <control controlID="193" controlTypeID="com.balsamiq.mockups::Paragraph" x="836" y="545" w="225" h="107" measuredW="200" measuredH="140" zOrder="90" locked="false" isInGroup="-1">
420
+ <controlProperties>
421
+ <bold>false</bold>
422
+ <size>14</size>
423
+ <text>Inserting%20or%20uploading%20an%20asset%20causes%20the%20appropriate%20radius%20tag%20to%20be%20inserted%20in%20the%20document.%20Also%20the%20asset%20is%20added%20to%20the%20%22attached%20assets%22%20list%20below.</text>
424
+ </controlProperties>
425
+ </control>
426
+ <control controlID="194" controlTypeID="com.balsamiq.mockups::Paragraph" x="1229" y="118" w="225" h="45" measuredW="200" measuredH="140" zOrder="91" locked="false" isInGroup="-1">
427
+ <controlProperties>
428
+ <bold>false</bold>
429
+ <size>14</size>
430
+ <text>This%20simplified%20flow%20streamlines%20the%20insertion%20process.</text>
431
+ </controlProperties>
432
+ </control>
433
+ <control controlID="195" controlTypeID="com.balsamiq.mockups::PointyButton" x="351" y="888" w="77" h="-1" measuredW="68" measuredH="27" zOrder="92" locked="false" isInGroup="-1">
434
+ <controlProperties>
435
+ <direction>center</direction>
436
+ <text>Detatch</text>
437
+ </controlProperties>
438
+ </control>
439
+ <control controlID="196" controlTypeID="com.balsamiq.mockups::Arrow" x="220" y="658" w="117" h="134" measuredW="150" measuredH="100" zOrder="93" locked="false" isInGroup="-1">
440
+ <controlProperties>
441
+ <curvature>0</curvature>
442
+ <leftArrow>false</leftArrow>
443
+ </controlProperties>
444
+ </control>
445
+ <control controlID="197" controlTypeID="com.balsamiq.mockups::Label" x="108" y="597" w="156" h="67" measuredW="357" measuredH="24" zOrder="94" locked="false" isInGroup="-1">
446
+ <controlProperties>
447
+ <bold>false</bold>
448
+ <size>14</size>
449
+ <text>This%20section%20is%20only%20revealed%20when%20assets%20are%20attached.</text>
450
+ </controlProperties>
451
+ </control>
452
+ </controls>
453
+ </mockup>