pageflow 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of pageflow might be problematic. Click here for more details.
- checksums.yaml +8 -8
- data/app/assets/images/pageflow/audio_loop_pictogram.png +0 -0
- data/app/assets/images/pageflow/audio_loop_pictogram_small.png +0 -0
- data/app/assets/images/pageflow/ov-internal_links.png +0 -0
- data/app/assets/images/pageflow/placeholder_link_thumbnail.jpg +0 -0
- data/app/assets/images/pageflow/placeholder_link_thumbnail_large.jpg +0 -0
- data/app/assets/images/pageflow/placeholder_thumbnail.jpg +0 -0
- data/app/assets/javascripts/pageflow/audio_player.js +5 -0
- data/app/assets/javascripts/pageflow/editor/api.js +4 -0
- data/app/assets/javascripts/pageflow/editor/api/file_type.js +32 -0
- data/app/assets/javascripts/pageflow/editor/api/file_types.js +73 -0
- data/app/assets/javascripts/pageflow/editor/base.js +5 -0
- data/app/assets/javascripts/pageflow/editor/collections/file_usages_collection.js +13 -1
- data/app/assets/javascripts/pageflow/editor/collections/files_collection.js +54 -0
- data/app/assets/javascripts/pageflow/editor/controllers/sidebar_controller.js +2 -14
- data/app/assets/javascripts/pageflow/editor/initializers/error_listener.js +8 -0
- data/app/assets/javascripts/pageflow/editor/initializers/setup_collections.js +5 -3
- data/app/assets/javascripts/pageflow/editor/initializers/setup_file_types.js +21 -0
- data/app/assets/javascripts/pageflow/editor/models/audio_file.js +1 -15
- data/app/assets/javascripts/pageflow/editor/models/encoded_file.js +32 -0
- data/app/assets/javascripts/pageflow/editor/models/entry.js +29 -63
- data/app/assets/javascripts/pageflow/editor/models/file_stage.js +7 -6
- data/app/assets/javascripts/pageflow/editor/models/hosted_file.js +20 -0
- data/app/assets/javascripts/pageflow/editor/models/image_file.js +8 -31
- data/app/assets/javascripts/pageflow/editor/models/mixins/file_with_type.js +3 -0
- data/app/assets/javascripts/pageflow/editor/models/mixins/stage_provider.js +11 -5
- data/app/assets/javascripts/pageflow/editor/models/mixins/transient_references.js +5 -0
- data/app/assets/javascripts/pageflow/editor/models/other_entry.js +9 -3
- data/app/assets/javascripts/pageflow/editor/models/page.js +9 -11
- data/app/assets/javascripts/pageflow/editor/models/uploaded_file.js +65 -0
- data/app/assets/javascripts/pageflow/editor/models/video_file.js +1 -14
- data/app/assets/javascripts/pageflow/editor/routers/sidebar_router.js +2 -9
- data/app/assets/javascripts/pageflow/editor/templates/file_item.jst.ejs +1 -1
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/audio.js +4 -0
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/audio_loop.js +23 -0
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/background_image.js +4 -0
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/background_video.js +4 -0
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/internal_links.js +4 -0
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/video.js +4 -0
- data/app/assets/javascripts/pageflow/editor/views/embedded/page_link_embedded_view.js +1 -1
- data/app/assets/javascripts/pageflow/editor/views/explorer_file_item_view.js +2 -0
- data/app/assets/javascripts/pageflow/editor/views/file_item_view.js +8 -1
- data/app/assets/javascripts/pageflow/editor/views/file_stage_item_view.js +8 -1
- data/app/assets/javascripts/pageflow/editor/views/files_explorer_view.js +11 -43
- data/app/assets/javascripts/pageflow/editor/views/files_view.js +11 -21
- data/app/assets/javascripts/pageflow/editor/views/input_view.js +1 -1
- data/app/assets/javascripts/pageflow/editor/views/inputs/file_input_view.js +6 -0
- data/app/assets/javascripts/pageflow/editor/views/inputs/select_input_view.js +5 -0
- data/app/assets/javascripts/pageflow/editor/views/mixins/selectable_view.js +7 -5
- data/app/assets/javascripts/pageflow/editor/views/uploader_view.js +15 -5
- data/app/assets/javascripts/pageflow/page_types/audio.js +1 -1
- data/app/assets/javascripts/pageflow/page_types/audio_loop.js +90 -0
- data/app/assets/javascripts/pageflow/page_types/video.js +1 -1
- data/app/assets/javascripts/pageflow/ready.js +17 -2
- data/app/assets/javascripts/pageflow/video_player/player_buffered_patch.js +13 -2
- data/app/assets/stylesheets/pageflow/mixins/pageflow.css.scss +9 -0
- data/app/assets/stylesheets/pageflow/mixins/shadow.css.scss +12 -1
- data/app/assets/stylesheets/pageflow/overview.css.scss +3 -3
- data/app/assets/stylesheets/pageflow/page_types.css.scss +2 -0
- data/app/assets/stylesheets/pageflow/page_types/audio.css.scss +2 -13
- data/app/assets/stylesheets/pageflow/page_types/audio_loop.css.scss +0 -0
- data/app/assets/stylesheets/pageflow/page_types/video.css.scss +4 -0
- data/app/assets/stylesheets/pageflow/player_controls.css.scss +72 -6
- data/app/assets/stylesheets/pageflow/themes/default/navigation.css.scss +3 -0
- data/app/assets/stylesheets/pageflow/themes/default/overview.css.scss +3 -0
- data/app/controllers/pageflow/editor/files_controller.rb +11 -24
- data/app/controllers/pageflow/{video_files_controller.rb → files_controller.rb} +6 -2
- data/app/helpers/pageflow/audio_files_helper.rb +40 -0
- data/app/helpers/pageflow/file_thumbnails_helper.rb +18 -0
- data/app/helpers/pageflow/pages_helper.rb +3 -24
- data/app/jobs/pageflow/upload_file_to_s3_job.rb +2 -2
- data/app/models/concerns/pageflow/hosted_file.rb +93 -0
- data/app/models/pageflow/audio_file.rb +1 -12
- data/app/models/pageflow/draft_entry.rb +2 -11
- data/app/models/pageflow/image_file.rb +14 -14
- data/app/models/pageflow/page.rb +7 -24
- data/app/models/pageflow/published_entry.rb +3 -2
- data/app/models/pageflow/revision.rb +7 -0
- data/app/models/pageflow/thumbnail_file_resolver.rb +33 -0
- data/app/models/pageflow/video_file.rb +10 -34
- data/app/models/pageflow/zencoder_attachment.rb +2 -2
- data/app/state_machines/pageflow/encoded_file_state_machine.rb +8 -20
- data/app/state_machines/pageflow/image_file_state_machine.rb +4 -0
- data/app/views/pageflow/audio_files/_audio_file.html.erb +1 -0
- data/app/views/pageflow/audio_files/_script_tag.html.erb +3 -0
- data/app/views/pageflow/config/_editor_seeds.json.jbuilder +1 -0
- data/app/views/pageflow/editor/audio_files/_audio_file.json.jbuilder +0 -6
- data/app/views/pageflow/editor/files/_file.json.jbuilder +16 -0
- data/app/views/pageflow/editor/files/create.json.jbuilder +1 -1
- data/app/views/pageflow/editor/files/index.json.jbuilder +4 -1
- data/app/views/pageflow/editor/image_files/_image_file.json.jbuilder +1 -8
- data/app/views/pageflow/editor/video_files/_video_file.json.jbuilder +0 -8
- data/app/views/pageflow/entries/_entry.html.erb +2 -2
- data/app/views/pageflow/entries/_multimedia_alert.html.erb +14 -7
- data/app/views/pageflow/entries/_social_meta_tags.html.erb +1 -1
- data/app/views/pageflow/entries/edit.html.erb +6 -4
- data/app/views/pageflow/entries/navigation/_bar_top.html.erb +1 -1
- data/app/views/pageflow/entries/navigation/_page.html.erb +2 -2
- data/app/views/pageflow/entries/overview/_chapter.html.erb +3 -1
- data/app/views/pageflow/entries/overview/_entry.html.erb +2 -1
- data/app/views/pageflow/entries/overview/_page.html.erb +1 -1
- data/app/views/pageflow/entries/show.css.erb +1 -21
- data/app/views/pageflow/entries/show.json.jbuilder +8 -3
- data/app/views/pageflow/file_types/_thumbnails.css.erb +7 -0
- data/app/views/pageflow/files/show.html.erb +1 -0
- data/app/views/pageflow/page_types/_page_type.json.jbuilder +4 -0
- data/app/views/pageflow/pages/templates/_audio.html.erb +6 -5
- data/app/views/pageflow/pages/templates/_audio_loop.html.erb +34 -0
- data/app/views/pageflow/video_files/_video_file.html.erb +1 -0
- data/config/initializers/page_type_helpers.rb +2 -2
- data/config/initializers/paperclip.rb +32 -0
- data/config/initializers/zencoder.rb +3 -3
- data/config/locales/activerecord.de.yml +3 -2
- data/config/locales/pageflow/audio.de.yml +4 -0
- data/config/locales/pageflow/editor/errors.de.yml +6 -0
- data/config/routes.rb +4 -10
- data/lib/generators/pageflow/initializer/templates/pageflow.rb +2 -1
- data/lib/pageflow.rb +5 -3
- data/lib/pageflow/ability_mixin.rb +2 -2
- data/lib/pageflow/built_in_page_type.rb +40 -7
- data/lib/pageflow/configuration.rb +17 -0
- data/lib/pageflow/file_type.rb +60 -0
- data/lib/pageflow/file_types.rb +25 -0
- data/lib/pageflow/page_type.rb +31 -0
- data/lib/pageflow/version.rb +1 -1
- data/lib/pageflow/zencoder_video_output_definition.rb +3 -3
- data/spec/factories/audio_files.rb +2 -2
- data/spec/factories/hosted_files.rb +35 -0
- data/spec/factories/video_files.rb +2 -2
- metadata +37 -18
- data/app/assets/images/pageflow/themes/default/logo_navi.png +0 -0
- data/app/assets/images/pageflow/themes/default/logo_navi_invert.png +0 -0
- data/app/assets/javascripts/pageflow/editor/collections/audio_files_collection.js +0 -7
- data/app/assets/javascripts/pageflow/editor/collections/image_files_collection.js +0 -8
- data/app/assets/javascripts/pageflow/editor/collections/mixins/files_collection.js +0 -42
- data/app/assets/javascripts/pageflow/editor/collections/video_files_collection.js +0 -8
- data/app/assets/javascripts/pageflow/editor/models/mixins/encoded_file.js +0 -51
- data/app/assets/javascripts/pageflow/editor/models/mixins/file.js +0 -31
- data/app/assets/javascripts/pageflow/editor/views/audio_file_item_view.js +0 -14
- data/app/assets/javascripts/pageflow/editor/views/image_file_item_view.js +0 -10
- data/app/assets/javascripts/pageflow/editor/views/video_file_item_view.js +0 -18
- data/app/controllers/pageflow/editor/audio_files_controller.rb +0 -11
- data/app/controllers/pageflow/editor/image_files_controller.rb +0 -11
- data/app/controllers/pageflow/editor/video_files_controller.rb +0 -11
- data/app/views/pageflow/video_files/show.html.erb +0 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NmUxZDk3ZWY0NmIxNjVhYjE5MDdlODYzNDZmMjZiNGE5NjNmMzFmMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZGRkZmMzODVhMGMyZjE4ZjBkYmZlYTZiM2NlYjc4MTA1NzljZGUyOQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NDNmNDJjNWMyZGI0N2M2Y2M4YzNhNDI1MTVlNDNhODkyNTAwM2UyODBmY2U1
|
10
|
+
ZTgzYzNjYjNmNTMzZmZlZDQyMGJjZDc5M2I4MzQ3MzA0ZTEyNTkwNzk1ZTgz
|
11
|
+
YWFkNTkxYTA0ODkxNGE1YmNkMTFkNGRlMGQwOWRhYmY2MGQ3YmM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YmE0ZDhjMWVmZDk2NjQxNGIwODg5MjJkODcwNGUyZTFjNWZkZjdhNzEwMTk5
|
14
|
+
NTU3NzUzNmI5ODY2MjM3ZmVjMGI0NTJlMDM4MTc4NDYwN2M3ZWZjNTlmNGE5
|
15
|
+
NTIyZDliMTczMjAxYTYyZjZlMzY2M2IzNTgzZjI0ZWYzMWVhYzk=
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -66,4 +66,9 @@ pageflow.AudioPlayer.fromAudioTag = function(element) {
|
|
66
66
|
type: $(this).attr('type')
|
67
67
|
};
|
68
68
|
}).get(), element[0]);
|
69
|
+
};
|
70
|
+
|
71
|
+
pageflow.AudioPlayer.fromScriptTag = function(element) {
|
72
|
+
var sources = element.length ? JSON.parse(element.text()) : [];
|
73
|
+
return new pageflow.AudioPlayer(sources);
|
69
74
|
};
|
@@ -121,6 +121,10 @@ pageflow.EditorApi = pageflow.Object.extend({
|
|
121
121
|
*/
|
122
122
|
this.failures = new pageflow.FailuresAPI();
|
123
123
|
|
124
|
+
/**
|
125
|
+
*
|
126
|
+
*/
|
127
|
+
this.fileTypes = new pageflow.FileTypes();
|
124
128
|
|
125
129
|
/** @private */
|
126
130
|
this.createFileSelectionHandler = function(handlerName, encodedPayload) {
|
@@ -0,0 +1,32 @@
|
|
1
|
+
pageflow.FileType = pageflow.Object.extend({
|
2
|
+
initialize: function(options) {
|
3
|
+
this.model = options.model;
|
4
|
+
|
5
|
+
this.typeName = options.typeName;
|
6
|
+
this.collectionName = options.collectionName;
|
7
|
+
this.paramKey = options.paramKey;
|
8
|
+
this.i18nKey = options.i18nKey;
|
9
|
+
|
10
|
+
this.metaDataAttributes = options.metaDataAttributes || [];
|
11
|
+
|
12
|
+
if (typeof options.matchUpload === 'function') {
|
13
|
+
this.matchUpload = options.matchUpload;
|
14
|
+
}
|
15
|
+
else if (options.matchUpload instanceof RegExp) {
|
16
|
+
this.matchUpload = function(upload) {
|
17
|
+
return upload.type.match(options.matchUpload);
|
18
|
+
};
|
19
|
+
}
|
20
|
+
else {
|
21
|
+
throw 'matchUpload option of FileType "' + this.collectionName + '" must either be a function or a RegExp.';
|
22
|
+
}
|
23
|
+
|
24
|
+
this.setupModelNaming();
|
25
|
+
},
|
26
|
+
|
27
|
+
setupModelNaming: function() {
|
28
|
+
this.model.prototype.modelName = this.model.prototype.modelName || this.paramKey;
|
29
|
+
this.model.prototype.paramRoot = this.model.prototype.paramRoot || this.paramKey;
|
30
|
+
this.model.prototype.i18nKey = this.model.prototype.i18nKey || this.i18nKey;
|
31
|
+
}
|
32
|
+
});
|
@@ -0,0 +1,73 @@
|
|
1
|
+
pageflow.FileTypes = pageflow.Object.extend({
|
2
|
+
initialize: function() {
|
3
|
+
this.clientSideConfigs = [];
|
4
|
+
},
|
5
|
+
|
6
|
+
register: function(name, config) {
|
7
|
+
if (this._setup) {
|
8
|
+
throw 'File types already set up. Register file types before initializers run.';
|
9
|
+
}
|
10
|
+
|
11
|
+
this.clientSideConfigs[name] = config;
|
12
|
+
},
|
13
|
+
|
14
|
+
setup: function(serverSideConfigs) {
|
15
|
+
var clientSideConfigs = this.clientSideConfigs;
|
16
|
+
this._setup = true;
|
17
|
+
|
18
|
+
this.fileTypes = _.map(serverSideConfigs, function(serverSideConfig) {
|
19
|
+
var clientSideConfig = clientSideConfigs[serverSideConfig.collectionName];
|
20
|
+
|
21
|
+
if (!clientSideConfig) {
|
22
|
+
throw 'Missing client side config for file type "' + serverSideConfig.collectionName + '"';
|
23
|
+
}
|
24
|
+
|
25
|
+
return new pageflow.FileType(_.extend({}, serverSideConfig, clientSideConfig));
|
26
|
+
});
|
27
|
+
},
|
28
|
+
|
29
|
+
findByUpload: function(upload) {
|
30
|
+
var result = this.find(function(fileType) {
|
31
|
+
return fileType.matchUpload(upload);
|
32
|
+
});
|
33
|
+
|
34
|
+
if (!result) {
|
35
|
+
throw(new pageflow.FileTypes.UnmatchedUploadError(upload));
|
36
|
+
}
|
37
|
+
|
38
|
+
return result;
|
39
|
+
},
|
40
|
+
|
41
|
+
findByCollectionName: function(collectionName) {
|
42
|
+
var result = this.find(function(fileType) {
|
43
|
+
return fileType.collectionName === collectionName;
|
44
|
+
});
|
45
|
+
|
46
|
+
if (!result) {
|
47
|
+
throw('Could not find file type by collection name "' + collectionName +'"');
|
48
|
+
}
|
49
|
+
|
50
|
+
return result;
|
51
|
+
}
|
52
|
+
});
|
53
|
+
|
54
|
+
_.each(['each', 'map', 'reduce', 'first', 'find'], function(method) {
|
55
|
+
pageflow.FileTypes.prototype[method] = function() {
|
56
|
+
if (!this._setup) {
|
57
|
+
throw 'File types are not yet set up.';
|
58
|
+
}
|
59
|
+
|
60
|
+
var args = Array.prototype.slice.call(arguments);
|
61
|
+
args.unshift(this.fileTypes);
|
62
|
+
return _[method].apply(_, args);
|
63
|
+
};
|
64
|
+
});
|
65
|
+
|
66
|
+
pageflow.FileTypes.UnmatchedUploadError = pageflow.Object.extend({
|
67
|
+
name: 'UnmatchedUploadError',
|
68
|
+
|
69
|
+
initialize: function(upload) {
|
70
|
+
this.upload = upload;
|
71
|
+
this.message = 'No matching file type found for upload "' + upload.name + '" of type "' + upload.type +'".';
|
72
|
+
}
|
73
|
+
});
|
@@ -23,6 +23,9 @@
|
|
23
23
|
//= require_self
|
24
24
|
|
25
25
|
//= require_tree ./models/mixins
|
26
|
+
//= require ./models/uploaded_file
|
27
|
+
//= require ./models/hosted_file
|
28
|
+
//= require ./models/encoded_file
|
26
29
|
//= require_tree ./models
|
27
30
|
//= require_tree ./collections/mixins
|
28
31
|
//= require ./collections/multi_collection
|
@@ -42,11 +45,13 @@
|
|
42
45
|
//= require_tree ./views
|
43
46
|
|
44
47
|
//= require ./initializers/setup_config
|
48
|
+
//= require ./initializers/setup_file_types
|
45
49
|
//= require ./initializers/setup_collections
|
46
50
|
//= require ./initializers/setup_page_types
|
47
51
|
//= require ./initializers/edit_lock
|
48
52
|
//= require ./initializers/files_polling
|
49
53
|
//= require ./initializers/routing
|
54
|
+
//= require ./initializers/error_listener
|
50
55
|
//= require ./initializers/additional_initializers
|
51
56
|
//= require ./initializers/boot
|
52
57
|
|
@@ -3,7 +3,19 @@ pageflow.FileUsagesCollection = Backbone.Collection.extend({
|
|
3
3
|
|
4
4
|
name: 'file_usages',
|
5
5
|
|
6
|
+
initialize: function(models, options) {
|
7
|
+
options = options || {};
|
8
|
+
this.entry = options.entry;
|
9
|
+
},
|
10
|
+
|
6
11
|
url: function() {
|
7
|
-
return '/editor/entries/' +
|
12
|
+
return '/editor/entries/' + this.entry.get('id') + '/file_usages';
|
13
|
+
},
|
14
|
+
|
15
|
+
createForFile: function(file, options) {
|
16
|
+
return this.create({
|
17
|
+
file_id: file.get('id'),
|
18
|
+
file_type: file.fileType().typeName
|
19
|
+
}, options);
|
8
20
|
}
|
9
21
|
});
|
@@ -0,0 +1,54 @@
|
|
1
|
+
pageflow.FilesCollection = Backbone.Collection.extend({
|
2
|
+
initialize: function(models, options) {
|
3
|
+
options = options || {};
|
4
|
+
|
5
|
+
this.entry = options.entry;
|
6
|
+
this.fileType = options.fileType;
|
7
|
+
this.name = options.fileType.collectionName;
|
8
|
+
},
|
9
|
+
|
10
|
+
comparator: function(file) {
|
11
|
+
var fileName = file.get('file_name');
|
12
|
+
return (fileName && fileName.toLowerCase) ? fileName.toLowerCase() : fileName;
|
13
|
+
},
|
14
|
+
|
15
|
+
url: function() {
|
16
|
+
return '/editor/entries/' + this.getEntry().get('id') + '/files/' + this.name;
|
17
|
+
},
|
18
|
+
|
19
|
+
getEntry: function() {
|
20
|
+
return this.entry || pageflow.entry;
|
21
|
+
},
|
22
|
+
|
23
|
+
confirmable: function() {
|
24
|
+
return new pageflow.SubsetCollection({
|
25
|
+
parent: this,
|
26
|
+
watchAttribute: 'state',
|
27
|
+
|
28
|
+
filter: function(item) {
|
29
|
+
return item.get('state') === 'waiting_for_confirmation';
|
30
|
+
},
|
31
|
+
});
|
32
|
+
}
|
33
|
+
});
|
34
|
+
|
35
|
+
pageflow.FilesCollection.createForFileTypes = function(fileTypes, files, options) {
|
36
|
+
return fileTypes.reduce(function(result, fileType) {
|
37
|
+
result[fileType.collectionName] = pageflow.FilesCollection.createForFileType(
|
38
|
+
fileType,
|
39
|
+
files[fileType.collectionName],
|
40
|
+
options
|
41
|
+
);
|
42
|
+
return result;
|
43
|
+
}, {});
|
44
|
+
};
|
45
|
+
|
46
|
+
pageflow.FilesCollection.createForFileType = function(fileType, files, options) {
|
47
|
+
return new pageflow.FilesCollection(
|
48
|
+
files,
|
49
|
+
_.extend({
|
50
|
+
fileType: fileType,
|
51
|
+
model: fileType.model
|
52
|
+
}, options || {})
|
53
|
+
);
|
54
|
+
};
|
@@ -10,23 +10,11 @@ pageflow.SidebarController = Backbone.Marionette.Controller.extend({
|
|
10
10
|
}));
|
11
11
|
},
|
12
12
|
|
13
|
-
|
14
|
-
this.files(handler, payload, 'image_files');
|
15
|
-
},
|
16
|
-
|
17
|
-
videoFiles: function(handler, payload) {
|
18
|
-
this.files(handler, payload, 'video_files');
|
19
|
-
},
|
20
|
-
|
21
|
-
audioFiles: function(handler, payload) {
|
22
|
-
this.files(handler, payload, 'audio_files');
|
23
|
-
},
|
24
|
-
|
25
|
-
files: function(handler, payload, tabName) {
|
13
|
+
files: function(collectionName, handler, payload) {
|
26
14
|
this.region.show(new pageflow.FilesView({
|
27
15
|
model: this.entry,
|
28
16
|
selectionHandler: handler && pageflow.editor.createFileSelectionHandler(handler, payload),
|
29
|
-
tabName:
|
17
|
+
tabName: collectionName
|
30
18
|
}));
|
31
19
|
},
|
32
20
|
|
@@ -1,7 +1,9 @@
|
|
1
1
|
pageflow.app.addInitializer(function(options) {
|
2
|
-
pageflow.
|
3
|
-
|
4
|
-
pageflow.
|
2
|
+
pageflow.files = pageflow.FilesCollection.createForFileTypes(pageflow.editor.fileTypes, options.files);
|
3
|
+
|
4
|
+
pageflow.imageFiles = pageflow.files.image_files;
|
5
|
+
pageflow.videoFiles = pageflow.files.video_files;
|
6
|
+
pageflow.audioFiles = pageflow.files.audio_files;
|
5
7
|
|
6
8
|
pageflow.pages = new pageflow.PagesCollection(options.pages);
|
7
9
|
pageflow.chapters = new pageflow.ChaptersCollection(options.chapters);
|
@@ -0,0 +1,21 @@
|
|
1
|
+
pageflow.app.addInitializer(function(options) {
|
2
|
+
pageflow.editor.fileTypes.register('image_files', {
|
3
|
+
model: pageflow.ImageFile,
|
4
|
+
metaDataAttributes: ['dimensions'],
|
5
|
+
matchUpload: /^image/
|
6
|
+
});
|
7
|
+
|
8
|
+
pageflow.editor.fileTypes.register('video_files', {
|
9
|
+
model: pageflow.VideoFile,
|
10
|
+
metaDataAttributes: ['format', 'dimensions', 'duration'],
|
11
|
+
matchUpload: /^video/
|
12
|
+
});
|
13
|
+
|
14
|
+
pageflow.editor.fileTypes.register('audio_files', {
|
15
|
+
model: pageflow.AudioFile,
|
16
|
+
metaDataAttributes: ['format', 'duration'],
|
17
|
+
matchUpload: /^audio/
|
18
|
+
});
|
19
|
+
|
20
|
+
pageflow.editor.fileTypes.setup(options.config.fileTypes);
|
21
|
+
});
|
@@ -1,17 +1,3 @@
|
|
1
|
-
pageflow.AudioFile =
|
2
|
-
modelName: 'audio_file',
|
3
|
-
paramRoot: 'audio_file',
|
4
|
-
i18nKey: 'pageflow/audio_file',
|
5
|
-
|
6
|
-
mixins: [pageflow.file, pageflow.encodedFile, pageflow.stageProvider, pageflow.retryable],
|
7
|
-
|
1
|
+
pageflow.AudioFile = pageflow.EncodedFile.extend({
|
8
2
|
thumbnailPictogram: 'audio',
|
9
|
-
|
10
|
-
urlRoot: function() {
|
11
|
-
return this.isNew() ? this.collection.url() : '/editor/audio_files';
|
12
|
-
},
|
13
|
-
|
14
|
-
isPositionable: function() {
|
15
|
-
return false;
|
16
|
-
}
|
17
3
|
});
|
@@ -0,0 +1,32 @@
|
|
1
|
+
pageflow.EncodedFile = pageflow.HostedFile.extend({
|
2
|
+
processingStages: function() {
|
3
|
+
var stages = [];
|
4
|
+
|
5
|
+
if (pageflow.config.confirmEncodingJobs) {
|
6
|
+
stages.push({
|
7
|
+
name: 'fetching_meta_data',
|
8
|
+
activeStates: ['waiting_for_meta_data', 'fetching_meta_data'],
|
9
|
+
failedStates: ['fetching_meta_data_failed']
|
10
|
+
});
|
11
|
+
}
|
12
|
+
|
13
|
+
stages.push({
|
14
|
+
name: 'encoding',
|
15
|
+
actionRequiredStates: ['waiting_for_confirmation'],
|
16
|
+
activeStates: ['waiting_for_encoding', 'encoding'],
|
17
|
+
failedStates: ['fetching_meta_data_failed', 'encoding_failed']
|
18
|
+
});
|
19
|
+
|
20
|
+
return stages;
|
21
|
+
},
|
22
|
+
|
23
|
+
readyState: 'encoded',
|
24
|
+
|
25
|
+
isConfirmable: function() {
|
26
|
+
return this.get('state') === 'waiting_for_confirmation';
|
27
|
+
},
|
28
|
+
|
29
|
+
isPositionable: function() {
|
30
|
+
return false;
|
31
|
+
}
|
32
|
+
});
|
@@ -6,8 +6,11 @@ pageflow.Entry = Backbone.Model.extend({
|
|
6
6
|
|
7
7
|
mixins: [pageflow.filesCountWatcher, pageflow.polling, pageflow.failureTracking],
|
8
8
|
|
9
|
-
initialize: function() {
|
10
|
-
|
9
|
+
initialize: function(attributes, options) {
|
10
|
+
options = options || {};
|
11
|
+
|
12
|
+
this.files = options.files || pageflow.files;
|
13
|
+
this.chapters = options.chapters || pageflow.chapters;
|
11
14
|
this.chapters.parentModel = this;
|
12
15
|
this.pages = pageflow.pages;
|
13
16
|
|
@@ -15,6 +18,10 @@ pageflow.Entry = Backbone.Model.extend({
|
|
15
18
|
this.videoFiles = pageflow.videoFiles;
|
16
19
|
this.audioFiles = pageflow.audioFiles;
|
17
20
|
|
21
|
+
pageflow.editor.fileTypes.each(function(fileType) {
|
22
|
+
this.watchFileCollection(fileType.collectionName, this.getFileCollection(fileType));
|
23
|
+
}, this);
|
24
|
+
|
18
25
|
this.listenTo(this.chapters, 'sort', function() {
|
19
26
|
this.pages.sort();
|
20
27
|
});
|
@@ -22,10 +29,6 @@ pageflow.Entry = Backbone.Model.extend({
|
|
22
29
|
this.listenTo(this, 'change:title change:summary change:credits change:manual_start change:home_url change:home_button_enabled', function() {
|
23
30
|
this.save();
|
24
31
|
});
|
25
|
-
|
26
|
-
this.watchFileCollection('image_files', this.imageFiles);
|
27
|
-
this.watchFileCollection('video_files', this.videoFiles);
|
28
|
-
this.watchFileCollection('audio_files', this.audioFiles);
|
29
32
|
},
|
30
33
|
|
31
34
|
addChapter: function() {
|
@@ -35,65 +38,31 @@ pageflow.Entry = Backbone.Model.extend({
|
|
35
38
|
});
|
36
39
|
},
|
37
40
|
|
38
|
-
|
39
|
-
var
|
41
|
+
addFileUpload: function(upload) {
|
42
|
+
var fileType = pageflow.editor.fileTypes.findByUpload(upload);
|
43
|
+
var file = new fileType.model({
|
44
|
+
state: 'uploading',
|
45
|
+
file_name: upload.name
|
46
|
+
});
|
40
47
|
|
41
|
-
|
42
|
-
record = new pageflow.ImageFile({
|
43
|
-
state: 'uploading',
|
44
|
-
file_name: file.name
|
45
|
-
});
|
46
|
-
pageflow.imageFiles.add(record);
|
47
|
-
}
|
48
|
-
else if (file.type.match(/^video/)) {
|
49
|
-
record = new pageflow.VideoFile({
|
50
|
-
state: 'uploading',
|
51
|
-
file_name: file.name
|
52
|
-
});
|
53
|
-
pageflow.videoFiles.add(record);
|
54
|
-
}
|
55
|
-
else if (file.type.match(/^audio/)) {
|
56
|
-
record = new pageflow.AudioFile({
|
57
|
-
state: 'uploading',
|
58
|
-
file_name: file.name
|
59
|
-
});
|
60
|
-
pageflow.audioFiles.add(record);
|
61
|
-
}
|
48
|
+
this.getFileCollection(fileType).add(file);
|
62
49
|
|
63
|
-
return
|
50
|
+
return file;
|
64
51
|
},
|
65
52
|
|
66
53
|
addFileUsage: function(file) {
|
67
|
-
|
54
|
+
var fileUsages = new pageflow.FileUsagesCollection([], {
|
55
|
+
entry: this
|
56
|
+
});
|
57
|
+
|
58
|
+
fileUsages.createForFile(file, { success: function(usage) {
|
68
59
|
file.set('usage_id', usage.get('id'));
|
69
|
-
this.
|
60
|
+
this.getFileCollection(file.fileType()).add(file);
|
70
61
|
}.bind(this)});
|
71
62
|
},
|
72
63
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
return file_usages.create({
|
77
|
-
file_id: file.get('id'),
|
78
|
-
file_type: file.get('typeName')
|
79
|
-
}, options);
|
80
|
-
|
81
|
-
},
|
82
|
-
|
83
|
-
addFileToCollection: function (file) {
|
84
|
-
this.getFileCollection(file.get('typeName')).add(file);
|
85
|
-
},
|
86
|
-
|
87
|
-
getFileCollection: function(filetype) {
|
88
|
-
return this[lowerCaseFirst(removeNamespace(filetype)) + 's'];
|
89
|
-
|
90
|
-
function removeNamespace(string) {
|
91
|
-
return string.split('::').pop();
|
92
|
-
}
|
93
|
-
|
94
|
-
function lowerCaseFirst(string) {
|
95
|
-
return string.charAt(0).toLowerCase() + string.slice(1);
|
96
|
-
}
|
64
|
+
getFileCollection: function(fileType) {
|
65
|
+
return this.files[fileType.collectionName];
|
97
66
|
},
|
98
67
|
|
99
68
|
pollForPendingFiles: function() {
|
@@ -108,13 +77,10 @@ pageflow.Entry = Backbone.Model.extend({
|
|
108
77
|
if (response) {
|
109
78
|
this.set(_.pick(response, 'published', 'published_until'));
|
110
79
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
delete response.image_files;
|
116
|
-
delete response.video_files;
|
117
|
-
delete response.audio_files;
|
80
|
+
pageflow.editor.fileTypes.each(function(fileType) {
|
81
|
+
this.getFileCollection(fileType).set(response[fileType.collectionName], {add: false, remove: false});
|
82
|
+
delete response[fileType.collectionName];
|
83
|
+
}, this);
|
118
84
|
}
|
119
85
|
|
120
86
|
return response;
|