UNPKG

afterwriting

Version:

Post-processing tools for Fountain screenplays

254 lines (206 loc) 6.61 kB
define(function(require) { var _ = require('lodash'), Protoplast = require('protoplast'), fontLoaders = require('fonts/font-loaders'), print_profiles = require('utils/print-profiles'); // TODO: Decouple plugin-specific settings (+++) // TODO: Rename Settings properties to CamelCase (+++) var Settings = Protoplast.Model.extend({ snippets: { name: 'snippets', value: {} }, // Parser settings double_space_between_scenes: { name: 'double_space_between_scenes', value: false }, use_dual_dialogue: { name: 'use_dual_dialogue', value: true }, each_scene_on_new_page: { name: 'each_scene_on_new_page', value: false }, print_sections: { name: 'print_sections', value: false }, print_synopsis: { name: 'print_synopsis', value: false }, print_actions: { name: 'print_actions', value: true }, print_headers: { name: 'print_headers', value: true }, print_dialogues: { name: 'print_dialogues', value: true }, print_notes: { name: 'print_notes', value: false }, // Liner settings text_more: { name: 'text_more', value: '(MORE)' }, text_contd: { name: 'text_contd', value: "(CONT'D)" }, split_dialogue: { name: 'split_dialogue', value: true }, // PDF settings font_family: { name: 'font_family', value: 'CourierPrime' }, print_profile: { name: 'print_profile', value: "a4" }, embolden_scene_headers: { name: 'embolden_scene_headers', value: false }, underline_scene_headers: { name: 'underline_scene_headers', value: false }, show_page_numbers: { name: 'show_page_numbers', value: true }, print_title_page: { name: 'print_title_page', value: true }, text_scene_continued: { name: 'text_scene_continued', value: 'CONTINUED' }, number_sections: { name: 'number_sections', value: false }, print_header: { name: 'print_header', value: '' }, print_footer: { name: 'print_footer', value: '' }, print_watermark: { name: 'print_watermark', value: '' }, scenes_numbers: { name: 'scenes_numbers', value: 'none' }, scene_continuation_bottom: { name: 'scene_continuation_bottom', value: false }, scene_continuation_top: { name: 'scene_continuation_top', value: false }, // App settings show_background_image: { name: 'show_background_image', value: true }, load_last_opened: { name: 'load_last_opened', value: false }, night_mode: { name: 'night_mode', value: false }, use_print_settings_for_stats: { name: 'use_print_settings_for_stats', value: true }, cloud_lazy_loading: { name: 'cloud_lazy_loading', value: false }, pdfjs_viewer: { name: 'pdfjs_viewer', value: false }, stats_keep_last_scene_time: { name: 'stats_keep_last_scene_time', value: true }, stats_who_with_who_max: { name: 'stats_who_with_who_max', value: 10 }, merge_empty_lines: { name: 'merge_empty_lines', value: true }, $create: function() { var savedProperties = this.$meta.properties.name; for (var property in savedProperties) { if (savedProperties.hasOwnProperty(property)) { this.on(property + '_changed', this._triggerChanged.bind(this, property, savedProperties[property])); } } }, toJSON: function() { var json = {}; var savedProperties = this.$meta.properties.name; for (var property in savedProperties) { if (savedProperties.hasOwnProperty(property)) { json[savedProperties[property]] = this[property]; } } return json; }, fromJSON: function(json) { var savedProperties = this.$meta.properties.name, jsonProperty; for (var property in savedProperties) { if (savedProperties.hasOwnProperty(property)) { jsonProperty = savedProperties[property]; if (json.hasOwnProperty(jsonProperty)) { this[property] = json[jsonProperty]; } } } }, print: { get: function() { var tmpRatio = fontLoaders[this.font_family] && fontLoaders[this.font_family].config["tmp-ratio"]; var printProfile = print_profiles[this.print_profile]; if (tmpRatio) { printProfile = _.cloneDeep(print_profiles[this.print_profile]); Object.keys(printProfile).forEach(function(key) { if (typeof (printProfile[key]) === "object" && printProfile[key].max) { printProfile[key].max = Math.floor(printProfile[key].max * tmpRatio); } }); } return printProfile; } }, _triggerChanged: function(property, key) { this.dispatch('changed', {key: key, value: this[property]}); } }); return Settings; });